本文介绍: 坑点:每个选手的rank为该轮竞赛选出的优胜者数+1!而不应该根据该选手是在第几轮淘汰算的!因为肯定比优胜者的rank低嘛。思路:可以用队列模拟选手顺序,每次取出组数个选手(不足则全部取出),然后将优胜者放入下一轮队列中,淘汰者记录下来,最后将淘汰者的rank标记为优胜者数+1。题意:给定一组选手,按一定顺序将这些选手进行分组竞赛,每组的最大值为优胜者,进入下一轮分组再进行竞赛,直到选出最大值。然后输出每个选手的rank。(成功浪费两小时寿命,坑比模拟题,真的心累)
(成功浪费两小时寿命,坑比模拟题,真的心累)
题意:给定一组选手,按一定顺序将这些选手进行分组竞赛,每组的最大值为优胜者,进入下一轮分组再进行竞赛,直到选出最大值。然后输出每个选手的rank。
坑点:每个选手的rank为该轮竞赛选出的优胜者数+1!!而不应该根据该选手是在第几轮淘汰算的!因为肯定比优胜者的rank低嘛。我阅读理解确实不太好,于是成功浪费两小时。
思路:可以用队列模拟选手顺序,每次取出组数个选手(不足则全部取出),然后将优胜者放入下一轮队列中,淘汰者记录下来,最后将淘汰者的rank标记为优胜者数+1。
#include<bits/stdc++.h>
using namespace std;
struct node{
int val;
int rank;
};
node p[1010];
queue<int>q;
int n,m;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>p[i].val;
}
for(int i=0;i<n;i++){
int a;cin>>a;
q.push(a);
}
while(q.size()>1){
queue<int>next;
queue<int>loser;
while(q.size()){
int k=min(m,(int)q.size());
vector<int>temp;
while(k--){
int f=q.front();q.pop();
temp.push_back(f);
}
int mx=-1,pos;
for(auto x:temp){
if(mx<p[x].val){
mx=p[x].val;
pos=x;
}
}
for(auto x:temp){
if(x!=pos){
loser.push(x);
}
}
next.push(pos);
// cout<<pos<<' ';
}
while(loser.size()){
int f=loser.front();loser.pop();
p[f].rank=next.size()+1;
}
q=next;
}
p[q.front()].rank=1;
int flag=0;
for(int i=0;i<n;i++){
if(flag)cout<<' ';
cout<<p[i].rank;flag=1;
}
}
原文地址:https://blog.csdn.net/qq_63128300/article/details/134628362
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_13399.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。