STL_A1056 Mice and Rice (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805419468242944

/*
*queue的使用,先进先出
*变量定义要有意义
*制定晋级规则以及排名
*/
#include<iostream>
using namespace std;
#include<cstdio>
#include<queue>
const int MAXN=1010;

struct mouse {
    int weight;
    int ranks;
}mouse[MAXN];

int main() {
      int number,grouper,order;
      scanf("%d%d",&number,&grouper);
      for(int i=0;i<number;i++) {
        scanf("%d",&mouse[i].weight);
      }
      queue<int> queues;
      for(int i=0;i<number;i++) {
        scanf("%d",&order);
        queues.push(order);
      }
      int temp=number,group;
      while(queues.size() != 1) {
        if(temp%grouper==0) group=temp/grouper;
        else group=temp/grouper+1;
        for(int i=0;i<group;i++) {
            int maxmouse=queues.front();
            for(int j=0;j<grouper;j++) {
                //最后一组老鼠不足grouper时退出循环
                if(i*grouper+j>=temp) break;
                int fronts=queues.front();
                if(mouse[fronts].weight > mouse[maxmouse].weight) {
                    maxmouse=fronts;
                }
                mouse[fronts].ranks=group+1; //该轮老鼠排名为group+1
                queues.pop();
            }
            queues.push(maxmouse); //把胜利的老鼠晋级
        }
        temp=group; //group只老鼠进入下一轮
      }
      //当队列里只剩1只老鼠时,令其排名为1
      mouse[queues.front()].ranks=1;
      for(int i=0;i<number;i++) {
        printf("%d",mouse[i].ranks);
        if(i<number-1) printf(" ");
      }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/2o2o/p/11371354.html