码迷,mamicode.com
首页 > 其他好文 > 详细

PAT A1056 Mice and Rice (25分)

时间:2020-09-12 21:48:03      阅读:38      评论:0      收藏:0      [点我收藏+]

标签:include   false   scanf   empty   weight   cst   lse   等于   int   

技术图片

技术图片

#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int N = 1010;
queue<int> q;
int w[N];
int result[N];

int main(){
    int np,ng;
    scanf("%d%d",&np,&ng);
    int weight;
    int candidate;
    for(int i = 0;i<np;i++){
        scanf("%d",&weight);
        w[i]=weight;
    }
    for(int i = 0;i<np;i++){
        scanf("%d",&candidate);
        q.push(candidate);
    }
    //contest
    int tnp = np;
    while(tnp!=1){//最后一场比赛就1人直接胜出
        int time = tnp/ng;
        int maxid;
        if(tnp%ng!=0) time++;
        for(int i = 0;i< time;i++ ){
            if(q.empty()==false){
                if(tnp%ng==0||i!=time-1){//可以整除+不能整除且i不等于最后一次contest
                    maxid = q.front();
                    q.pop();
                    for(int j = 1;j<ng;j++){
                        int temp = q.front();
                        q.pop();
                        if(w[temp] > w[maxid]){ 
                            result[maxid] = time+1;//失败者直接计分
                            maxid = temp;

                        }else{
                            result[temp] = time+1;//失败者直接计分
                            
                        }
                    }
                    q.push(maxid);
                }else{//不能整除且i等于最后一次contest
                    maxid = q.front();
                    q.pop();
                    for(int j = 1;j<tnp%ng;j++){
                        int temp = q.front();
                        q.pop();
                        if(w[temp] > w[maxid]){ 
                            result[maxid] = time+1;//失败者直接计分
                            maxid = temp;
                            
                        }else{
                            result[temp] = time+1;//失败者直接计分
                        }
                    }
                    q.push(maxid);
                }                
            }

        }
        tnp = time;//下轮比赛人数
    }
    //胜者记为1
    result[q.front()] = 1;
    //print
    for(int i = 0;i<np;i++){
        printf("%d",result[i]);
        if(i!=np-1) printf(" ");
    }
    return 0;
}

PAT A1056 Mice and Rice (25分)

标签:include   false   scanf   empty   weight   cst   lse   等于   int   

原文地址:https://www.cnblogs.com/shuibeng/p/13593836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!