方法:利用容器queue确保先后顺序,组内两两比较,小者即可得最终排名。
注意:数量不足ng的组的处理。
#include <iostream>
#include <queue>
using namespace std;
int np,ng;
struct mice{
int weight,rank;
}mi[1010];
queue<int> q;
int main(){
//freopen("g:\\in.txt","r",stdin);
scanf("%d%d",&np,&ng);
for(int i=0;i<np;i++)
scanf("%d",&mi[i].weight);
for(int i=0;i<np;i++){
int temp;
scanf("%d",&temp);
q.push(temp);
}
while(q.size()>1){
int nowlen=q.size(),index=0;
int group=(nowlen+ng-1)/ng;
for(int i=0;i<group;i++){
int maxn=q.front();
q.pop();
index++;
for(int j=1;j<ng&&index<nowlen;j++){
int cur=q.front();
q.pop();
index++;
if(mi[maxn].weight<mi[cur].weight){
mi[maxn].rank=group+1;
maxn=cur;
}else mi[cur].rank=group+1;
}
q.push(maxn);
}
}
mi[q.front()].rank=1;
for(int i=0;i<np-1;i++)
printf("%d ",mi[i].rank);
printf("%d",mi[np-1].rank);
return 0;
}