n,k,i,t,h:longint;
w,e,a:array[1..100000]of longint;
procedure as(r,l:longint);
var
x,i,j,v:longint;
begin
x:=w[(r+l) div 2];
i:=r;
j:=l;
repeat
while w[j]<x do
j:=j-1;
while w[i]>x do
i:=i+1;
if i<=j then
begin
v:=w[i];
w[i]:=w[j];
w[j]:=v;
v:=a[i];
a[i]:=a[j];
a[j]:=v;
i:=i+1;
j:=j-1;
end;
until i>j;
if r<j then as(r,j);
if i<l then as(i,l);
end;
begin
readln(n,k);
for i:=1 to 10 do
read(e[i]);
readln;
for i:=1 to n do
read(w[i]);
for i:=1 to n do
a[i]:=i;
as(1,n);
for i:=1 to n-1 do
begin
t:=i+1;
while w[i]=w[t] do
begin
if a[i]>a[t] then
begin
h:=a[i];
a[i]:=a[t];
a[t]:=h;
end;
t:=t+1;
end;
end;
for i:=1 to n do
w[i]:=w[i]+e[(i-1) mod 10+1];
as(1,n);
for i:=1 to n-1 do
begin
t:=i+1;
while w[i]=w[t] do
begin
if a[i]>a[t] then
begin
h:=a[i];
a[i]:=a[t];
a[t]:=h;
end;
t:=t+1;
end;
end;
for i:=1 to k-1 do
write(a[i],’ ’);
write(a[k]);
end.
#include <stdio.h>
#include <stdlib.h>
struct person
{
long int xuhao;
long int w;
};
int comp(void const *a,void const *b)
{
struct person *c,*d;
c=(struct person *)a;
d=(struct person *)b;
if(c->w>d->w)return -1;
if(c->w<d->w)return 1;
if(c->xuhao<d->xuhao)return -1;
return 1;
}
int main()
{
long int i,n,k,e[11];
struct person a[100000];
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].xuhao=i;
}
qsort(a+1,n,sizeof(struct person),&comp);
for(i=1;i<=n;i++)
a[i].w+=e[(i-1)%10+1];
qsort(a+1,n,sizeof(struct person),&comp);
printf("%ld",a[1].xuhao);
for(i=2;i<=k;i++)
printf(" %ld",a[i].xuhao);
return 0;
}
#include<stdio.h>
int e[11];
int w[50001];
long s[50001];
void qsort(long low,long high)
{
if(low>=high) return;
long i=low,j=high;
int tw=w[(i+j)/2];
int ts=s[(i+j)/2];
w[(i+j)/2]=w[i];
s[(i+j)/2]=s[i];
while(i<j)
{
while(i<j&&(w[j]<tw||w[j]==tw&&s[i]>ts)) j--;
if(i<j)
{
w[i]=w[j];
s[i]=s[j];
}
while(i<j&&(w[i]>tw||w[i]==tw&&s[i]<ts)) i++;
if(i<j)
{
w[j]=w[i];
s[j]=s[i];
}
}
w[i]=tw;
s[i]=ts;
qsort(low,i-1);
qsort(i+1,high);
}
int main()
{
long n,k;
long i;
scanf("%ld %ld",&n,&k);
for(i=1;i<=10;i++) scanf("%d",&e[i]);
for(i=1;i<=n;i++)
{
scanf("%d",&w[i]);
s[i]=i;
}
qsort(1,n);
for(i=1;i<=n;i++) w[i]+=e[(i-1)%10+1];
qsort(1,n);
for(i=1;i<k;i++) printf("%d ",s[i]);
printf("%d",s[k]);
return 0;
}
[quote][url=/Redirect.asp?Act=Reply&DID=4647&RID=26765]原帖[/url]由 [i]saygoodbye[/i] 于 2012-8-2 22:57:00 发表
是第六个点吗?
好像不是改数据类型。
我在读入k之后加上 if(k==0) return 0; 就AC了。[/quote]
好奇葩啊,居然要考虑k=0的情况。
加上这句话后,果然ac了。