题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1056
思路分析:主要在于输入数据第三行的理解,按组号递增序给出组内队员编号(个人觉得题目并没有描述清楚,有意误导?)
代码如下:
#include <stdio.h>
int weight[1001];
int order[1001];
int _rank[1001];
int main()
{
//freopen("C:\\Users\\Devon\\Desktop\\input.txt","r",stdin);
int n,g;
scanf("%d%d",&n,&g);
for(int i=0;i<n;i++){
scanf("%d",&weight[i]);
_rank[i]=0;
}
for(int i=0;i<n;i++) scanf("%d",&order[i]);
int l=n;
while(l>1){
int gnum=l/g+1;
if(l<=g) gnum=1;
else if(l%g==0) gnum=l/g;
for(int i=0;i<gnum;i++){
int temp=i*g;
int vmax=-1;
int biggest=0;
for(int j=0;j<g;j++){
if(temp+j<l){
int tmp1=order[temp+j];
int tmp=weight[tmp1];
if(tmp>vmax) vmax=tmp,biggest=j+temp;
_rank[tmp1]=gnum+1;
}
}
order[i]=order[biggest];
}
l=gnum;
}
_rank[order[0]]=1;
for(int i=0;i<n-1;i++) printf("%d ",_rank[i]);
printf("%d\n",_rank[n-1]);
return 0;
}