1056. Mice and Rice (25)
1056. Mice and Rice (25)
時(shí)間限制 100 ms內(nèi)存限制 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解析:這道題對(duì)于競技規(guī)則不了解的我真的好費(fèi)勁, 查閱了網(wǎng)友的解釋,題意總結(jié)如下:
有n個(gè)老鼠,第一行給出n個(gè)老鼠的重量,第二行給出他們的順序。
1.每一輪分成若干組,每組m個(gè)老鼠,不能整除的多余的作為最后一組。
2.每組重量最大的進(jìn)入下一輪。
讓你給出每只老鼠最后的排名。
很簡單,用兩個(gè)數(shù)組模擬一下即可
order1存儲(chǔ)進(jìn)入當(dāng)前一輪老鼠的索引順序
order2存儲(chǔ)進(jìn)入下一輪老鼠的索引順序
如果當(dāng)前有g(shù)roups個(gè)組,那么會(huì)有g(shù)roups個(gè)老鼠進(jìn)入下一輪,則沒有進(jìn)入下一輪的排名都為groups+1
如果只有一個(gè)組,那么最大的那個(gè)排名即為1。
這道題還是很有代表性的,但是還是可以把這道題從難到易的進(jìn)行分解:
1,從頭到尾遍歷數(shù)組A,找到A的最大值---->太簡單了
2,數(shù)組A從頭到尾3個(gè)一組,找到每組內(nèi)的最大值,并存到數(shù)組B中---->還行,不算難,就是多了一層對(duì)組的遍歷,然后在每組內(nèi)對(duì)"組員"遍歷
3,數(shù)組A從頭到尾3個(gè)一組,找到每組內(nèi)的最大值,并還存到數(shù)組A中, ----->哈哈,這個(gè)也不難
4,重復(fù)3,直到數(shù)組A中只剩一個(gè)元素--->再來一層循環(huán), 恩,稍加控制條件,不難
代碼如下:
/*************************************************************************> 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; }總結(jié)
以上是生活随笔為你收集整理的1056. Mice and Rice (25)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: APQC 7.0.5通用版流程框架
- 下一篇: java缓存技术_java缓存技术