题目描述

分析:
给出所有老鼠的重量,以及每组的老鼠的数量,把老鼠分组,选出每组重量最大的老鼠晋级,直到最后剩一只老鼠,输出每只老鼠的排名。
用一个队列来记录当前没有淘汰的老鼠,每次枚举当前轮的老鼠,选出每组重量最大的老鼠。
此题有一定难度,需要之后反复理解
#include<cstdio>
#include<queue>
using namespace std;
struct mouse{
int w;
int r;
}m[1005];
int main(){
int np,ng;
scanf("%d %d",&np,&ng);
for(int i=0;i<np;i++){
scanf("%d",&m[i].w);
}
queue<int> q;
int x;
for(int i=0;i<np;i++){
scanf("%d",&x);
q.push(x);
}
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(m[front].w>m[k].w){
k=front;
}
m[front].r=group+1;
q.pop();
}
q.push(k);
}
temp=group;
}
m[q.front()].r=1;
for(int i=0;i<np;i++){
printf("%d",m[i].r);
if(i<np-1)
{
printf(" ");
}
}
}
本文解析了一个关于老鼠分组晋级问题的算法,通过队列操作找出每轮重量最大者,直至决出冠军。挑战在于高效处理数据并动态调整分组。
426

被折叠的 条评论
为什么被折叠?



