1056 Mice and Rice

(成功浪费两小时寿命,坑比模拟题,真的心累)

题意:给定一组选手,按一定顺序将这些选手进行分组竞赛,每组的最大值为优胜者,进入下一轮分组再进行竞赛,直到选出最大值。然后输出每个选手的rank。

坑点:每个选手的rank为该轮竞赛选出的优胜者数+1!!而不应该根据该选手是在第几轮淘汰算的!因为肯定比优胜者的rank低嘛。我阅读理解确实不太好,于是成功浪费两小时。

思路:可以用队列模拟选手顺序,每次取出组数个选手(不足则全部取出),然后将优胜者放入下一轮队列中,淘汰者记录下来,最后将淘汰者的rank标记为优胜者数+1。

#include
using namespace std;

struct node{
    int val;
    int rank;
};
node p[1010];
queueq;
int n,m;
int main(){
    cin>>n>>m;
    for(int i=0;i>p[i].val;
    }
    for(int i=0;i>a;
        q.push(a);
    }
    while(q.size()>1){
        queuenext;
        queueloser;
        while(q.size()){
            int k=min(m,(int)q.size());
            vectortemp;
            while(k--){
                int f=q.front();q.pop();
                temp.push_back(f);
            }
            int mx=-1,pos;
            for(auto x:temp){
                if(mx

你可能感兴趣的:(算法)