讨论 / P9 怎么回事 help (谢!)
dongfanzhu 2010-06-13 20:08:00
点我顶贴 收藏 删除
题目:佳佳的魔法照片

状态: Unaccepted

测评机: Xeond[6]

得分: 40分

提交日期: 2010-2-19 22:57:00

有效耗时: 312毫秒

测试结果1: 通过本测试点|有效耗时172ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 通过本测试点|有效耗时47ms

测试结果4: 通过本测试点|有效耗时46ms

测试结果5: 运行错误|普通保护错误

测试结果6: 运行错误|普通保护错误

测试结果7: 运行错误|普通保护错误

测试结果8: 运行错误|普通保护错误

测试结果9: 运行错误|普通保护错误

测试结果10: 运行错误|普通保护错误

代码:

program P9;

var

n,k,i,j:longint;

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

a,b:array[1..50000] of longint;

procedure qsort(l,r:longint);

var

x,i,j,t,y:longint;

begin

i:=l;j:=r;x:=a[(l+r)div 2];y:=b[(l+r)div 2];

repeat

while (a[i]>x)or((a[i]=x)and(b[i]<y)) do inc(i);

while (a[j]<x)or((a[i]=x)and(b[i]>y)) do dec(j);

if i<=j then

begin

t:=a[i]; a[i]:=a[j]; a[j]:=t;

t:=b[i]; b[i]:=b[j]; b[j]:=t;

inc(i);dec(j);

end

until i>j;

if l<j then qsort(l,j);

if i<r then qsort(i,r);

end;

begin

readln(n,k);

for i:=1 to 10 do read(e[i]);

readln;

for i:=1 to n do begin read(a[i]);b[i]:=i;end;

qsort(1,n);

for i:=1 to n do inc(a[i],e[(i-1) mod 10+1]);

qsort(1,n);

for i:=1 to k-1 do write(b[i],' ');

if k<>0 then write(b[k]);

end.

#1 dongfanzhu@2010-02-19 07:46:00
回复 删除
速度来人啊
#2 dongfanzhu@2010-02-19 07:47:00
回复 删除
题目:佳佳的魔法照片

问题编号:9

题目描述

[题目背景]

如果你看过《哈利·波特》,你就会知道魔法世界里的照片是很神奇的。也许是因为小魔法师佳佳长的

太帅,很多人都找他要那种神奇的魔法照片,而且还都要佳佳和他的MM的合照。那些照片可是非常珍贵的,他到底应该把照片给谁呢?

[题目描述]

一共有n个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1--n)。按照这个序号对10取模的值将这些人分为10类。也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 10 +1,显然类别序号的取值为1--10。第i类的人将会额外得到E[i]的权值。你需要做的就是求出加上额外权值以后,最终的权值最大的k个人,并输出他们的编号。权值都是正整数。在排序中,如果两人的W[i]相同,编号小的优先。

输入格式

共三行:

第一行输出用空格隔开的两个整数,分别是n和k。

第二行给出了10个正整数,分别是E[1]到E[10]。

第三行给出了n个正整数,第i个数表示编号为i的人的权值W[i]。

输出格式

只需输出一行用空格隔开的k个整数,分别表示最终的W[i]从高到低的人的编号。

样例输入

10 10

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14 16 18 20

样例输出

10 9 8 7 6 5 4 3 2 1

#3 cyc@2010-02-22 05:17:00
回复 删除
可能是数组下标越界:215
#4 125062883@2010-06-13 20:08:00
回复 删除
回复 楼主dongfanzhu 的帖子

快排

while (a[i]>x)or((a[i]=x)and(b[i]<y)) do inc(i);

while (a[j]<x)or((a[i]=x)and(b[i]>y)) do dec(j);

错把j打成i了

其他就不知道了

查看更多回复
提交回复