排序、模拟。
以下是我的代码:
#include<stdio.h>
#define MAXN 50001
typedef struct
{
long num,w;
}newtype;
void qsort(newtype a[],long begin,long end)
{
long i=begin,j=end,mid=a[(begin+end)/2].w,midn=a[(begin+end)/2].num;
newtype t;
do{
while((a[i].w>mid)||(a[i].w==mid&&a[i].num<midn)) i++;
while((a[j].w<mid)||(a[j].w==mid&&a[j].num>midn)) j--;
if(i<=j)
{
t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
}
}while(i<=j);
if(i<end) qsort(a,i,end);
if(j>begin) qsort(a,begin,j);
}
int main()
{
long n,k,i,e[11];
newtype a[MAXN];
scanf("%ld%ld",&n,&k);
for(i=1;i<=10;i++)
scanf("%ld",&e[i]);
for(i=1;i<=n;i++)
{
scanf("%ld",&a[i].w);
a[i].num=i;
}
// Read In
qsort(a,1,n);
for(i=1;i<=n;i++)
a[i].w+=e[(i-1)%10+1];
qsort(a,1,n);
for(i=1;i<=k;i++)
printf("%ld ",a[i].num);
return 0;
}
posted on 2010-01-06 20:06
lee1r 阅读(223)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟