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。

(这段摘自http://www.cnblogs.com/chenxiwenruo/p/6519890.html)

这道题还是很有代表性的,但是还是可以把这道题从难到易的进行分解:

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;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java poi读取,写入Excel2003

Java poi读取,写入Excel2003 相关阅读&#xff1a;poi读写Excel2007:http://www.cnblogs.com/gavinYang/p/3576741.htmljxl读写excel2003/2007:http://www.cnblogs.com/gavinYang/p/3576819.html package com.gavin.operational.excle;import java.io.FileInputStream; import …

leetcode 21 合并两个有序链表 C++

因为迭代比较好理解 所以我们在这里用递归 class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(!l1) return l2;else if(!l2) return l1;else if(l1->val<l2->val){l1->nextmergeTwoLists(l1->next,l2);return l1;}else{l2->…

1061. 判断题(15)

1061. 判断题(15) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue判断题的评判很简单&#xff0c;本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。 输入格式&#xff1a; 输入在第一行给出两个不超过100的正整数N和M&…

css和 js 改变html里面的定位。

css和 js 改变html里面的定位。&#xff08;三种方式&#xff09; <style type"text/css">#div1{border: 1px aquamarine solid;/*固定定位&#xff1a;此元素在整个网页的位置不变,固定某处不动*/position : fixed;left: 20px;top: 10px;}#div2{/*相对定位&am…

终端I/O之行控制函数

下列4个函数提供了终端设备的行控制能力。其中&#xff0c;filedes引用一个终端设备&#xff0c;否则出错返回&#xff0c;errno设置为ENOTTY。 #include <termios.h> int tcdrain(int filedes); int tcflow(int filedes, int action); int tcflush(int filedes, int que…

js 正则表达式实现文本验证

<style>.spa{/*js来改变span颜色*/color: red;}</style><script type"text/javascript">function checkIn(obj){//失去焦点&#xff08;鼠标离开文本框&#xff09;时验证//文本框的值var val obj.value;//拿到文本框的名字&#xff0c;用来做swi…

1060. 爱丁顿数(25)

1060. 爱丁顿数(25) 时间限制250 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力&#xff0c;还定义了一个“爱丁顿数”E&#xff0c;即满足有E天骑车超过E英里的最大整数E。据说爱丁顿自己的…

leetcode 203 移除链表元素 C++

注意第一个元素的处理方法 今晚还有四个题要做&#xff0c;来不及解释了&#xff0c;上代码 class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode*prenew ListNode(0,head);struct ListNode*temppre;if(!temp->next) return null…

unity3d由多个部分组成一个角色

摘自http://forum.unity3d.com/threads/16485-quot-stitch-multiple-body-parts-into-one-character-quot So I have many many models. Each has a skeleton, material, etc. I want to take some of these and combine them into one so I can apply animation commands to …

求质数的个数

/我买了一本书&#xff0c;意大利作家 保罗.乔尔达诺 得奖的一本小说&#xff0c;好奇这本书有多少页。但它每页页码都是质数&#xff0c;需求如下&#xff0c;1907页书&#xff0c;每个页数以质数命名&#xff0c;求有多少页。/ package funJoy;public class calBook {public…

leetcode 701 二叉搜索树的插入操作 C++ 递归和迭代

迭代 class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if(!root) return new TreeNode(val);TreeNode*curroot;while(cur){if(val<cur->val){if(cur->left)curcur->left;else{cur->leftnew TreeNode(val);break;}}else if(val>…

1062. 最简分数(20)

1062. 最简分数(20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue一个分数一般写成两个整数相除的形式&#xff1a;N/M&#xff0c;其中M不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N1/M1 和 N2/M…

解决ListView 缓存机制带来的显示不正常问题

ListView加载数据原理:系统绘制ListView时&#xff0c;首先会用getCount&#xff08;&#xff09;函数得到要绘制的这个列表的长度&#xff0c;然后开始逐行绘制。然后调用getView()函数&#xff0c;在这个函数里面首先获得一个View&#xff08;简单item&#xff0c;如字符串或…

Java里面static, final, this, super, 代码块, 单例模式

static关键字 package csdn;public class staticWord {public static void main(String[] args) {funStatic fs1 new funStatic();funStatic.showA();fs1.b 2;fs1.showB(); // 2System.out.println("----------");funStatic fs2 new funStatic();funStatic.a 3…

1063. 计算谱半径(20)

1063. 计算谱半径(20) 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue在数学中&#xff0c;矩阵的“谱半径”是指其特征值的模集合的上确界。换言之&#xff0c;对于给定的n个复数空间的特征值{a1b1i, ..., anbni}&#xff0c;它们的模为实部…

用了vscode和clion我都裂开了

vscode看着挺牛逼&#xff0c;经常遇到问题&#xff0c;每次运行还得f5调试&#xff0c;你如果想便捷一点&#xff0c;你可以去下插件&#xff0c;比如ccmopiler&#xff0c;code runner啥的。我自己用c但是这两个玩意都不支持c11想要支持还得自己配你看4S店上很多文章&#xf…

windows phone (12) 小试自定义样式

windows phone (12) 小试自定义样式 原文:windows phone (12) 小试自定义样式样式在BS开发中经常用到&#xff0c;在wp中系统也提供了解决办法&#xff0c;就是对设置的样式的一种资源共享&#xff0c;首先是共享资源的位置&#xff0c;它是在App类中&#xff0c;之前我们已经有…

xdoj判断堆栈出栈序列是否有效c++

我在leetcode上写过类似的题&#xff0c;这个代码在xdoj上只能得***50***分&#xff0c;跪求各位大佬挑挑毛病。 #include<stack> #include<iostream> #include<vector> using namespace std; int main(){vector<int>poped;stack<int>s;int n,t;…

1064. 朋友数(20)

1064. 朋友数(20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue如果两个整数各位数字的和是一样的&#xff0c;则被称为是“朋友数”&#xff0c;而那个公共的和就是它们的“朋友证号”。例如123和51就是朋友数&#xff0c;因为123 51 6&…

Java StringBuffer

最近在学Java API 做的简单笔记 package C12_17;public class testBuffer {public static void main(String[] args) {//StringBuffer 属于java.lang包&#xff0c;属于基础包&#xff0c;jdk api 里面有其运用方式。StringBuffer sb new StringBuffer("Hello");//…