讨论 / 晕死 全是一个结果 我错哪了 我要崩溃了 大牛救我!!!!!
Rafe 2010-10-29 19:04:00
点我顶贴 收藏 删除
题目:紧急援救

状态: Unaccepted

测评机: Xeond[6]

得分: 10分

提交日期: 2010-10-30 9:03:00

有效耗时: 187毫秒

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

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

正确结果应为:81

测试结果3: 输出过少|用户输出数据少于标准输出的50%[标准输出4位|选手输出1位]

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

正确结果应为:476

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

正确结果应为:439

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

正确结果应为:558

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

正确结果应为:155

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

正确结果应为:581

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

正确结果应为:745

测试结果10: 输出过少|用户输出数据少于标准输出的50%[标准输出4位|选手输出1位]

提交代码: view sourceprint?

const

wayx:array[1..4]of -1..1=(-1,0,1,0);

wayy:array[1..4]of -1..1=(0,1,0,-1);

var

aa:array[1..1000000] of record

x:1..1000;

y:1..1000;

a1:longint;

end;

a:array[1..1000,1..1000] of 0..1;

i,j,x,y,n,sum,head,tail,mx,my:longint;

b:array[1..1000,1..1000] of boolean;

s:ansistring;

begin

fillchar(b,sizeof(b),true);

readln(n);

for x:=1 to n do

begin

readln(s); for y:=1 to n do val(s[x],a[x,y]);

end;

readln(x,y);

readln(mx,my);

head:=0; tail:=1; aa[1].x:=x; aa[1].y:=y; aa[1].a1:=0;

while (head<tail) do

begin

inc(head);

for i:=1 to 4 do

begin

x:=aa[head].x; y:=aa[head].y;

if (x+wayx[i]=mx) and (y+wayy[i]=my) then begin writeln(aa[head].a1+1); readln; exit; end;

if b[x+wayx[i],y+wayy[i]] and (a[x+wayx[i],y+wayy[i]]=0) and (x+wayx[i]>0) and (y+wayy[i]>0) and (x+wayx[i]<=n) and (y+wayy[i]<=n) then

begin

inc(tail);

aa[tail].x:=x+wayx[i];

aa[tail].y:=y+wayy[i];

aa[tail].a1:=aa[head].a1+1;

b[x+wayx[i],y+wayy[i]]:=false;

end;

end;

end;

end.

#1 Rafe@2010-10-29 18:19:00
回复 删除
来人吧
#2 Rafe@2010-10-29 18:20:00
回复 删除
救救我
#3 Rafe@2010-10-29 18:20:00
回复 删除
救救我
#4 Rafe@2010-10-29 18:20:00
回复 删除
救救我

#5 L.Lawliet@2010-10-29 18:42:00
回复 删除
[color=red]输出相同的原因是在第二次运行时你的程序崩溃了 于是后面崩溃的程序都会按照你的第一次输出结果输出 你可以试着在队列中加入判断:如果搜索完毕所有结果还没有到达目的地输出'fuck!'结果你会惊奇的发现 很多测试点都输出了。。。

解决这个问题的方法

我们的一般思路是找到新的扩展点后判断是否符合拓展条件 如果符合 压入队列

因为某种原因。。。这样造成了某些合法拓展点被pass掉

现在 我们每得到新的拓展点就压入队列 从队列中取数后再进行判断 这样就可以AC

具体原因我也不知道 但我就是在wa了30多次才发现这个问题

希望某只神牛说明道理。。。[/color]

#6 Rafe@2010-10-29 18:46:00
回复 删除
。。。。。。。。。。。

谢谢

#7 Rafe@2010-10-29 19:00:00
回复 删除
真的AC了 晕死
#8 Rafe@2010-10-29 19:02:00
回复 删除
Accepted

测评机: Xeond[6]

得分: 100分

提交日期: 2010-10-30 9:59:00

有效耗时: 4484毫秒

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

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

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

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

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

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

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

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

测试结果9: 通过本测试点|有效耗时531ms

测试结果10: 通过本测试点|有效耗时531ms

#9 Rafe@2010-10-29 19:02:00
回复 删除
const

wayx:array[1..4]of -1..1=(-1,0,1,0);

wayy:array[1..4]of -1..1=(0,1,0,-1);

var

aa:array[1..1000000] of record

x:1..1000;

y:1..1000;

a1:longint;

end;

a:array[1..1000,1..1000] of 0..1;

i,j,x,y,n,sum,head,tail,mx,my:longint;

b:array[1..1000,1..1000] of boolean;

s:ansistring;

begin

fillchar(b,sizeof(b),true);

readln(n);

for x:=1 to n do

begin

readln(s); for y:=1 to n do val(s[y],a[x,y]);

end;

readln(x,y);

readln(mx,my);

head:=0; tail:=1; aa[1].x:=x; aa[1].y:=y; aa[1].a1:=0;

while (head<tail) do

begin

inc(head);

if (aa[head].x=mx) and (aa[head].y=my) then begin writeln(aa[head].a1); exit; end;

for i:=1 to 4 do

begin

x:=aa[head].x; y:=aa[head].y;

if b[x+wayx[i],y+wayy[i]] and (a[x+wayx[i],y+wayy[i]]=0) and (x+wayx[i]>0) and (y+wayy[i]>0) and (x+wayx[i]<=n) and (y+wayy[i]<=n) then

begin

inc(tail);

aa[tail].x:=x+wayx[i];

aa[tail].y:=y+wayy[i];

aa[tail].a1:=aa[head].a1+1;

b[x+wayx[i],y+wayy[i]]:=false;

end;

end;

end;

end.

#10 Rafe@2010-10-29 19:03:00
回复 删除
神牛来 神牛来 怎么回事
查看更多回复
提交回复