1056. Mice and Rice (25)
1056. Mice and Rice (25)
時間限制 100 ms內存限制 65536 kB
代碼長度限制 16000 B
判題程序 Standard 作者 CHEN, Yue
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 NP?programmers. Then every NG?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 NG?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: NP?and NG?(<= 1000), the number of programmers and the maximum number of mice in a group, respectively. If there are less than NG?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 NP?distinct non-negative numbers Wi?(i=0,...NP-1) where each Wi?is the weight of the i-th mouse respectively. The third line gives the initial playing order which is a permutation of 0,...NP-1 (assume that the programmers are numbered from 0 to NP-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: 11 3 25 18 0 46 37 3 19 22 57 56 10 6 0 8 7 10 5 9 1 4 2 3 Sample Output: 5 5 5 2 5 5 5 3 1 3 5解析:這道題對于競技規則不了解的我真的好費勁, 查閱了網友的解釋,題意總結如下:
有n個老鼠,第一行給出n個老鼠的重量,第二行給出他們的順序。
1.每一輪分成若干組,每組m個老鼠,不能整除的多余的作為最后一組。
2.每組重量最大的進入下一輪。
讓你給出每只老鼠最后的排名。
很簡單,用兩個數組模擬一下即可
order1存儲進入當前一輪老鼠的索引順序
order2存儲進入下一輪老鼠的索引順序
如果當前有groups個組,那么會有groups個老鼠進入下一輪,則沒有進入下一輪的排名都為groups+1
如果只有一個組,那么最大的那個排名即為1。
這道題還是很有代表性的,但是還是可以把這道題從難到易的進行分解:
1,從頭到尾遍歷數組A,找到A的最大值---->太簡單了
2,數組A從頭到尾3個一組,找到每組內的最大值,并存到數組B中---->還行,不算難,就是多了一層對組的遍歷,然后在每組內對"組員"遍歷
3,數組A從頭到尾3個一組,找到每組內的最大值,并還存到數組A中, ----->哈哈,這個也不難
4,重復3,直到數組A中只剩一個元素--->再來一層循環, 恩,稍加控制條件,不難
代碼如下:
/*************************************************************************> File Name: 1056.c> Author: YueBo> Mail: yuebowhu@163.com> Created Time: Tue 23 May 2017 08:56:54 PM CST************************************************************************/#include <stdio.h> #include <stdlib.h>int main() {int weight[1024];int programmer[1024];int rank[1024];int np, ng, first_np;int i, j, k;int rem;int max_tmp;scanf("%d%d", &np, &ng);for (i = 0; i < np; i++)scanf("%d", weight+i);for (i = 0; i < np; i++)scanf("%d", programmer+i);first_np = np;while (1){rem = np % ng;j = 0;for (k = 0; k < np; k++){max_tmp = -1;for (i = ng*k; i < ng*k+ng && i < np; i++){if (weight[programmer[i]] > max_tmp)max_tmp = weight[programmer[i]];}for (i = ng*k; i < ng*k+ng && i < np; i++){if (weight[programmer[i]] == max_tmp){programmer[j] = programmer[i];j++;}elserank[programmer[i]] = np / ng + (rem==0 ? 0 : 1) + 1;}}if (np == 1){rank[programmer[0]] = 1; break;}np = np / ng + (rem==0 ? 0 : 1);}for (i = 0; i < first_np; i++){printf("%d", rank[i]);printf(i==first_np-1 ? "":" ");}printf("\n");return 0; }總結
以上是生活随笔為你收集整理的1056. Mice and Rice (25)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: APQC 7.0.5通用版流程框架
- 下一篇: java缓存技术_java缓存技术