深圳网站建设小江,谁可以做开码网站,网店管家,大学招生网站建设题意#xff1a;给定一组选手#xff0c;按一定顺序将这些选手进行分组竞赛#xff0c;每组的最大值为优胜者#xff0c;进入下一轮分组再进行竞赛#xff0c;直到选出最大值。然后输出每个选手的rank。
坑点#xff1a;每个选手的rank为该轮竞赛选出的优胜者数1#x…题意给定一组选手按一定顺序将这些选手进行分组竞赛每组的最大值为优胜者进入下一轮分组再进行竞赛直到选出最大值。然后输出每个选手的rank。
坑点每个选手的rank为该轮竞赛选出的优胜者数1而不应该根据该选手是在第几轮淘汰算的因为肯定比优胜者的rank低嘛。我阅读理解确实不太好于是成功浪费两小时。
思路可以用队列模拟选手顺序每次取出组数个选手(不足则全部取出)然后将优胜者放入下一轮队列中淘汰者记录下来最后将淘汰者的rank标记为优胜者数1。
#includebits/stdc.h
using namespace std;struct node{int val;int rank;
};
node p[1010];
queueintq;
int n,m;
int main(){cinnm;for(int i0;in;i){cinp[i].val;}for(int i0;in;i){int a;cina;q.push(a);}while(q.size()1){queueintnext;queueintloser;while(q.size()){int kmin(m,(int)q.size());vectorinttemp;while(k--){int fq.front();q.pop();temp.push_back(f);}int mx-1,pos;for(auto x:temp){if(mxp[x].val){mxp[x].val;posx;}}for(auto x:temp){if(x!pos){loser.push(x);}}next.push(pos);// coutpos ;}while(loser.size()){int floser.front();loser.pop();p[f].ranknext.size()1;}qnext;}p[q.front()].rank1;int flag0;for(int i0;in;i){if(flag)cout ;coutp[i].rank;flag1;}
}