讨论 / 求人解答为什么这个题wa 60分
hsez_ljc 2011-11-09 04:10:00
点我顶贴 收藏 删除
代码如下,bak代表那个人的权值,bh是那个人的编号……

var

bak:array [1..100000] of longint;

bh:array [1..100000] of longint;

n,i,j,k,t,m:longint;

a,b:longint;

sum:longint;

e:array [0..10] of longint;

code:longint;

procedure sort(i,j:longint);//取中排序

var

key,x1,x2,zet,tt:longint;

begin

if i<j then

begin

key:=bak[(i+j )shr 1];//中点的权值

x1:=i;

x2:=j;

tt:=bh[(i+j) shr 1];//中点的编号

repeat

while (bak[x1]>key) or ( (bak[x1]=key) and (bh[x1]<tt) ) do

inc(x1);

while (bak[x2]<key) or ( (bak[x2]=key) and (bh[x2]>tt) ) do

dec(x2);

if x1<=x2 then

begin

zet:=bak[x1];//交换权值和编号

bak[x1]:=bak[x2];

bak[x2]:=zet;

zet:=bh[x1];

bh[x1]:=bh[x2];

bh[x2]:=zet;

inc(x1);

dec(x2);

end;

until x1>x2;

if x1<j then sort(x1,j);

if x2>i then sort(i,x2);

end;

end;

begin

readln(n,k);

for i:=1 to 10 do

read(e[i]);

readln;

for i:=1 to n do

begin

read(bak[i]);

bh[i]:=i;

end;

sort(1,n);

for i:=1 to n do

begin

code:=((i-1) mod 10)+1;//求出分类编号

inc(bak[i],e[code]);

end;

sort (1,n);

for i:=1 to k do

write(bh[i],' ');

end.

不是空格问题……

#1 751972196@2011-11-09 04:10:00
回复 删除
饿

我加了个program就100了

查看更多回复
提交回复