这题就是模拟,悲剧的是,复试的时候我真的居然紧张到样例都模不出来,仅靠猜拿到了2分,可能第二次做这个题,今天这题充其量就花了半小时,可惜了,不过就算我这题过了我也只能在软院,因为我够不上计院那根线。。。
这题的话就是模拟,没什么好说的,代码如下:
#include<stdio.h>
int w[1001];
int tmp[1001][2];
int cl[1001][2];
int dep[1001];
int bb(int x,int y)
{
if(x%y==0)
return x/y;
else
return x/y+1;
}
int main()
{
int n,k;
int i,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",w+i);
for(i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
tmp[i][0]=w[x];
tmp[i][1]=x ;
}
int cnt=1;
int nn=n;
for(i=0;i<n;i++)
dep[i]=1;
while(1)
{
for(i=1;i<=bb(n,k);i++)
{
int max=-1000;
int dd=-1;
for(j=(i-1)*k+1;j<=(i-1)*k+k;j++)
{
if(j==n+1)
break;
if(max<tmp[j][0])
{
max=tmp[j][0];
dd=j;
}
}
cl[i][0]=max;
cl[i][1]=tmp[dd][1];
for(j=(i-1)*k+1;j<=(i-1)*k+k;j++)
{
if(j==n+1)
break;
if(j!=dd)
dep[ tmp[j][1] ]=bb(n,k)+1;
}
}
for(i=1;i<=bb(n,k);i++)
{
tmp[i][0]=cl[i][0];
tmp[i][1]=cl[i][1];
}
n=bb(n,k);
cnt++;
if(n==1)
break;
}
for(i=0;i<nn-1;i++)
printf("%d ",dep[i]);
printf("%d\n",dep[nn-1]);
}
return 0;
}