讨论 / 173fish学数学 栈溢出??悬赏7分
x-ray 2013-08-13 00:36:00
点我顶贴 收藏 删除
怪得很,全部栈溢出了,我的编译器有一个(0.9.6版本)提示栈溢出,2.2.0版本提示错误dos功能号,1.0.6版本样例对了??怎么搞的,过路大牛帮帮我!!

var a:array[1..20001]of longint;

n,i,j,sum:longint;

procedure merge(x,y:longint);

var t1,t2:array[1..20001]of longint;

c,len1,len2,mid,p1,p2,k:longint;

begin

if x<y then

begin

mid:=(x+y) div 2;

merge(x,mid);

merge(mid+1,y);

for i:=x to mid do t1[i]:=a[i];

for j:=mid+1 to y do t2[j]:=a[j];

t1[i]:=maxlongint;

t2[j+1]:=maxlongint;

p1:=x;p2:=mid+1;

for k:=x to y do

if t1[p1]<=t2[p2] then

begin

a[k]:=t1[p1];

inc(sum,k-p1);

inc(p1);

end

else

begin

a[k]:=t2[p2];

inc(p2);

end;

end;

end;

begin

readln(n);

for i:=1 to n do readln(a[i]);

sum:=0;

merge(1,n);

write(sum);

end.

#1 xxwzy@2009-04-28 07:36:00
回复 删除
ms这题爆搜就过了……
#2 x-ray@2009-04-28 07:45:00
回复 删除
我rp不好,测了N次还是超时
#3 wish@2009-04-28 21:04:00
回复 删除
t1[mid + 1] := MaxLongint;

t2[y + 1] := MaxLongint;

你那种写法是不是basic里学来的

建议否掉

不然会吃亏的

另外

var t1,t2:array[1..20001] of longint;

移到函数外面作为全局变量

这是栈溢出的根本原因

#4 x-ray@2009-04-28 21:22:00
回复 删除
移到外面了,但是还wa

回LS:‘t1[mid + 1] := MaxLongint;

t2[y + 1] := MaxLongint;

你那种写法是不是basic里学来的

建议否掉

不然会吃亏的’

什么意思,怎么改?

测试结果1: 测试结果错误.错误结果为:3088

正确结果应为:1825

测试结果2: 测试结果错误.错误结果为:12320

正确结果应为:7400

测试结果3: 测试结果错误.错误结果为:45847

正确结果应为:22241

测试结果4: 测试结果错误.错误结果为:446982

正确结果应为:292646

测试结果5: 测试结果错误.错误结果为:1197536

正确结果应为:724368

测试结果6: 测试结果错误.错误结果为:5259567

正确结果应为:4795846

测试结果7: 测试结果错误.错误结果为:12035815

正确结果应为:9095711

测试结果8: 测试结果错误.错误结果为:45885368

正确结果应为:31164401

测试结果9: 测试结果错误.错误结果为:79206342

正确结果应为:57902100

测试结果10: 测试结果错误.错误结果为:130238607

正确结果应为:96196943

大牛们知道怎么解决吗?

#5 wish@2009-04-28 21:27:00
回复 删除
if t1[p1]>t2[p2] then

你应该排成降序 而不是升序

貌似你对整个算法思路并没有很好的理解...

#6 x-ray@2009-04-28 21:39:00
回复 删除
我没学过basic,半年前刚开始学
#7 x-ray@2009-04-28 21:59:00
回复 删除
谢谢wish大牛,我看了讨论中你的程序后改了一下ac了
#8 0*1@2013-08-13 00:36:00
回复 删除
爆搜
#9 wzk@2014-05-02 23:18:28
回复 删除
呵呵
#10 wuxudongtv@2014-05-09 05:13:03
回复 删除
有聊
查看更多回复
提交回复