讨论 / 输出过少|用户输出数据少于标准输出的50%[标准输出22位|选手输出1位]
xdqck 2013-07-19 00:55:00
点我顶贴 收藏 删除
var

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.

#1 j372263969@2010-08-27 02:59:00
回复 删除
我跟你一样的情况啊。。。。。

#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;

}

#2 我超爱狼@2012-07-30 10:45:00
回复 删除
我也是

#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;

}

#3 snophy@2012-07-31 07:55:00
回复 删除
简单

把数据类型改成int64/qword

#4 saygoodbye@2012-08-02 07:57:00
回复 删除
是第六个点吗?

好像不是改数据类型。

我在读入k之后加上 if(k==0) return 0; 就AC了。

#5 wondering@2013-07-19 00:55:00
回复 删除
谢谢!

[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了。

查看更多回复
提交回复