PAT A1056 Mice and Rice

每次做PAT感觉自己都是个弱智。。。甚至怀疑自己是不是不适合CS。。。。他妈的这道题思路居然是看的;

这道题其实最核心的思路就是怎么解决迭代问题,还有RANK的计数问题;

首先题目是相当于循环赛的形式,所以一开始就要发现轮次的联系。RANK排名其实在本题目中就是轮次+1的关系;

首先将所有的老鼠入队列,假如一共N组,每组M个,就将队列中每M个选出最大的,塞到队尾,规定RANK值,操作N次,此时,队列中的元素就全是优胜者;

重复上述操作直至队列中只有一个元素,这个时候,这就是最胖的老鼠;

代码如下所示:

#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<queue>
using std::queue;
const int maxn=1010;
struct node{
    int weight;
    int rank;
}mouse[maxn];
int main(){
    int np,ng,order;
    scanf("%d%d",&np,&ng);
    for(int i=0;i<np;i++){
        scanf("%d",&mouse[i].weight);
    }
    queue<int>q;
    for(int i=0;i<np;i++){
       scanf("%d",&order);
       q.push(order);
    }
    int temp=np,group;
    while(q.size()!=1){
        if(temp%ng==0)
            group=temp/ng;
        else
            group=temp/ng+1;
        for(int i=0;i<group;i++){
            int k=q.front();
            for(int j=0;j<ng;j++){
                if(i*ng+j>=temp)
                    break;
                int front=q.front();
                if(mouse[front].weight>mouse[k].weight){
                    k=front;
                }
                mouse[front].rank=group+1;
                q.pop();
            }
            q.push(k);
        }
        temp=group;
    }
    mouse[q.front()].rank=1;
    for(int i=0;i<np;i++){
        printf("%d",mouse[i].rank);
        if(i<np-1){
            printf(" ");
        }
    }
    system("pause");
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值