这道题本身不难,难在理解题意;
坑点如下;
1,分组后老鼠排名,淘汰的老鼠排名均为group+1;
2,当最后一组老鼠不足np时设置条件结束循环;
代码如下;
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=1010;
struct node{
int R;
int W;
}mice[maxn];
int main(){
int np,ng;
scanf("%d%d",&np,&ng);
for(int i=0;i<np;i++)
{
scanf("%d",&mice[i].W);
}
queue<int>q;
int temp=np;
int group;
for(int i=0;i<np;i++)
{ int order;
scanf("%d",&order);
q.push(order);}
while(temp!=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(mice[front].W>mice[k].W)
{
k=front;
}
mice[front].R=group+1;
q.pop();
}
q.push(k);
}
temp=group;
}
mice[q.front()].R=1;
for(int i=0;i<np;i++)
{
printf("%d",mice[i].R);
if(i!=np-1)printf(" ");
}
}