PAT 1059 吃老鼠晋级赛
来源:互联网 发布:unity3d开发 编辑:程序博客网 时间:2024/06/02 07:28
题意:
有n个程序,要比赛吃老鼠,但是要分组比。每次小组胜利的晋级下一次比赛,直到分出第一名为止。
主要是理解输入
第一行是比赛程序的数量,和 每个小组的成员数。
第二行是每个程序能够吃的老鼠数量。
第三行是将这些程序排了个队,从左到右依次站好,按照顺序一个个分组,比赛。
例如例子里的第三行为6 0 8 7 10 5 8 1 4 2 3
则分为了
(6 0 8) (7 10 5) (8 1 4) (2 3) 这四组。
比赛后剩下 8 5 9 3
则分为 (8 5 9) 和(3)这两组。
以此类推,直到8号程序获得冠军。
最后输出从0号到m号的排名。
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<stack>#include<vector>#include<queue>#include<string>#include<map>using namespace std;#define INF 99999999#define M 2000//start 21:22//end 21:56int main(){int n,m;int w[M];int i;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d",&w[i]);vector<int> q;int qorder;for(i=0;i<n;i++){scanf("%d",&qorder);q.push_back(qorder);}vector<int> wq;//储存胜者的数组int qn;int rank[M];int maxi,maxw,rankn,j;while(q.size() > 1 ) //比赛者只剩下1个时,比赛结束{//确定这次比赛败者的名次//即败者名次 = 胜出者数量 + 1 qn = q.size();if(qn%m!=0) //若不整除,为胜者数量为qn/m+1 ,排名再要+1rankn = qn/m + 1 + 1;else rankn = qn/m + 1;maxw = -1;for(j = 0; j < q.size(); j++){i = q[j]; //这才是比赛者的序号rank[i] = rankn;//都先预设为败者if(w[i] > maxw ){maxw = w[i];maxi = i;}if((j+1) % m == 0 || j==q.size()-1){wq.push_back(maxi); //胜者晋级//继续进行下一组maxw = -1;}}q = wq;wq.clear(); }rank[maxi] = 1;for(i=0;i<n;i++){printf("%d",rank[i]);if(i!=n-1)cout<<" ";else cout<<endl;}}
阅读全文
0 0
- PAT 1059 吃老鼠晋级赛
- 猫吃老鼠问题
- 猫吃老鼠
- 猫吃老鼠 2
- 猫吃老鼠问题
- 猫吃老鼠问题
- 猫吃老鼠算法
- 猫吃老鼠算法
- 老鼠吃奶酪。
- 老鼠吃奶酪
- 面试题 猫吃老鼠
- C实现猫吃老鼠问题。。。。。
- 老鼠吃大米C#解法(递归实现)
- 猫吃老鼠的STL实现
- Java面试题:猫吃老鼠问题
- 笔试题1--猫吃老鼠问题
- 猫吃老鼠问题的单链表解法.
- 猫吃老鼠问题的链表实现
- 移动端多指事件
- 【数据结构 七】---字符串
- Excel VBA高效办公应用-第十四章-Excel图书管理系统
- c语言小技巧
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.9容器(4.9.1-4.9.3)
- PAT 1059 吃老鼠晋级赛
- 开发工程师人生之路
- 最小的K个数
- Linux下的静态库与动态库
- 安装配置Memcached
- GPU 显卡计算能力
- poj 2723 Get Luffy Out 二分+2-SAT
- 015. Spring NamedParameterJdbcTemplate访问数据库
- CheckBox复选框判断空