1056 Mice and Rice (25 分)
Mice and Rice is the name of a programming contest in which each programmer must write a piece of code to control the movements of a mouse in a given map. The goal of each mouse is to eat as much rice as possible in order to become a FatMouse.
First the playing order is randomly decided for N**P programmers. Then every N**G programmers are grouped in a match. The fattest mouse in a group wins and enters the next turn. All the losers in this turn are ranked the same. Every N**G winners are then grouped in the next match until a final winner is determined.
For the sake of simplicity, assume that the weight of each mouse is fixed once the programmer submits his/her code. Given the weights of all the mice and the initial playing order, you are supposed to output the ranks for the programmers.
Input Specification:
Each input file contains one test case. For each case, the first line contains 2 positive integers: N**P and N**G (≤1000), the number of programmers and the maximum number of mice in a group, respectively. If there are less than N**G mice at the end of the player’s list, then all the mice left will be put into the last group. The second line contains N**P distinct non-negative numbers W**i (i=0,⋯,N**P−1) where each W**i is the weight of the i-th mouse respectively. The third line gives the initial playing order which is a permutation of 0,⋯,N**P−1 (assume that the programmers are numbered from 0 to N**P−1). All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the final ranks in a line. The i-th number is the rank of the i-th programmer, and all the numbers must be separated by a space, with no extra space at the end of the line.
Sample Input:
1 | 11 3 |
Sample Output:
1 | 5 5 5 2 5 5 5 3 1 3 5 |
作者: CHEN, Yue
单位: 浙江大学
时间限制: 200 ms
内存限制: 64 MB
代码长度限制: 16 KB
题目大意
这题题目比较难懂,大意如下:
给出np老鼠总数,ng每组老鼠个数。需要按照ng分组,选出最重的老鼠进入下一轮。直到冠军产生为止。
第一行给出老鼠的个数以及每组老鼠数。第二行给出各老鼠重量。第三行给出老鼠的ID。以题中数据为例,ng为3,那么6,0,8为一组,选出最重的。7,10,5为一组,同样选出最重的,依次类推。每组中最重的进入下一轮,其余淘汰。输出各老鼠的排名。在同一轮中被淘汰的老鼠排名相同。
分析
利用四个vector<int>
。winner,loser存放晋级和淘汰的老鼠id。temp存放当前所有老鼠,group存放一组老鼠。当winner不唯一时循环,每一轮的winner为下一轮考虑的temp。将temp中的老鼠按ng分组,选出最重的加入winner,其余加入loser。这样,一轮temp结束后,loser中老鼠的名次即为winner中老鼠数+1。如此循环,最后一只老鼠的排名即为1。
代码
1 |
|