讨论 / 郁闷!!
123qaz 2010-10-31 04:50:00
点我顶贴 收藏 删除
状态: Unaccepted

测评机: Xeond[6]

得分: 80分

提交日期: 2010-8-9 20:59:00

有效耗时: 1609毫秒

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

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

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

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

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

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

测试结果7: 通过本测试点|有效耗时265ms

测试结果8: 通过本测试点|有效耗时250ms

测试结果9: 运行错误|栈溢出

测试结果10: 运行错误|栈溢出

program p350;

type arr=array[1..10000]of longint;

var n,m,ii,i,j,k,jj:longint;

a,c:arr;

procedure kuai(s,t:integer);

var i,j,x,t1,y:longint;

begin

i:=s;j:=t;x:=a[i];y:=c[i];

repeat

while (a[j]>=x) and (j>i) do j:=j-1;

if j>i then begin t1:=a[i];a[i]:=a[j];a[j]:=t1;t1:=c[i];c[i]:=c[j];c[j]:=t1;end;

while (a[i]<=x) and (i<j) do i:=i+1;

if i<j then begin t1:=a[j]; a[j]:=a[i];a[i]:=t1;t1:=c[j];c[j]:=c[i];c[i]:=t1; end

until i=j;

a[i]:=x;c[i]:=y;

i:=i+1;j:=j-1;

if s<j then kuai(s,j);

if i<t then kuai(i,t);

end;

begin

readln(n,m);

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

kuai(1,n);

for ii:=1 to m do

begin

readln(i,j,k); jj:=0;

repeat inc(jj);if (c[jj]<=j)and(c[jj]>=i) then dec(k); until k=0;

writeln(a[jj]);

end;

readln;

end.

谁知道为什么!郁闷!汗。。。。

望大家看看问题出在哪!

#1 Vilaboke@2010-08-09 06:08:00
回复 删除
把数组开大点试试。
#2 zhanglin@2010-08-09 06:13:00
回复 删除
栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。

//如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称为缓冲区溢出。//

栈溢出就是缓冲区溢出的一种。

//我认为你的变量应当设置大一点。。。。//

#3 Vilaboke@2010-08-09 06:14:00
回复 删除
你的C数组是记录每个数一开始的位置的么?

如果是的话你可以在排序的时候用上C数组来排。

最后直接输出a[k]就行。

#4 Vilaboke@2010-08-09 06:15:00
回复 删除
楼上说的那么多其实就是快排的时候压栈压爆了。
#5 zhanglin@2010-08-09 06:16:00
回复 删除
..抢我话。。。

不过 顶一下

#6 zhanglin@2010-08-09 06:16:00
回复 删除
我是摘抄

#7 zhanglin@2010-08-09 06:17:00
回复 删除
不一定,可能是出现错误。导致崩溃

#8 zhanglin@2010-08-09 06:19:00
回复 删除
楼上滴,发个标程吧
#9 zhanglin@2010-08-09 06:19:00
回复 删除
楼上滴,发个标程吧
#10 zhanglin@2010-08-09 06:21:00
回复 删除
重点在变量、数组的定义错误。但程序的本身也有一定影响。
查看更多回复
提交回复