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.
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.
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.
11 3
25 18 0 46 37 3 19 22 57 56 10
6 0 8 7 10 5 9 1 4 2 3
5 5 5 2 5 5 5 3 1 3 5
题目给出Np只老鼠的体重,每个小组最多可以包含Ng只老鼠,如果剩下来的老鼠不足Ng只则把这些老鼠归为另一组。题目中的分组就是:
第一组:19 25 57 第二组:22 10 3 第三组:56 18 37 第四组:0 46
第一组:57 22 56 第二组:46
第一组:57 46
第一组:57
排名的顺序则是1-Np,如果有两个第三名,那么就没有第四名,而且第一次淘汰人的排名就算组数+1。所以排名的算法就是[(当前的所有人数/最大组内人数)的向上取整+1]。
- #include
- using namespace std;
-
- int main(){
- int Np,Ng;
- cin>>Np>>Ng;
- int Mice[Np];
- int rank[Np] = {0};
- queue<int> r,tr;
- for(int i=0;i
- cin>>Mice[i];
- }
-
- for(int i=0;i
- int t;
- cin>>t;
- r.push(t);
- }
-
- int group;
- if(Np%Ng==1) group = Np/Ng;
- else group = Np/Ng+1;
-
- while(group>=0){
- int rankl=int(ceil(r.size()*1.0/Ng));
- while(!r.empty()){
- int max = -1;
- int tip = -1;
- for(int i=0;i
- if(!r.empty()){//防止有的小组老鼠数量不足
- int b = r.front();
- rank[b] = rankl+1;
- r.pop();
- if(Mice[b]>max){
- max = Mice[b];
- tip = b;
- }
- }
- }
- tr.push(tip);
- }
- if(tr.size()==1){
- rank[tr.front()] = 1;
- }
- r = tr;
- queue<int> empty;
- tr = empty;//清空队列
- group--;
- }
-
- for(int i=0;i
- cout<
- if(i!=Np-1) cout<<" ";
- }
- return 0;
- }
-
相关阅读:
mysql联合索引的使用
内容安全是什么?(如何严控内容安全)
YAML 学习笔记
pat basic 1084 外观数列
基于51的单片机GPS定位系统设计
2023数字科技生态大会-数字安全论坛 学习笔记
我的第二本书:Java微服务
第十一届蓝桥杯C++青少年组中/高级组选拔赛2019年真题解析
[普通物理] 半波损失 等厚与等倾干涉
数据分析-numpy1
-
原文地址:https://blog.csdn.net/weixin_55202895/article/details/126681247
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU