讨论 / 这道题有点坑!
烨毅 2012-02-23 21:05:00
点我顶贴 收藏 删除
有一种情况没有说明,但是在标程上有:

A B -1

B C -1

A C -2

这种情况中,A C 就要变成-1,就是说当A C为-2,A B >=-1,B C>=-1时,A C就要变为-1

编完后总感觉数据有点坑,这里贴上我WA的程序,希望有人能帮忙检查下,读入哪里错了!因为其他部分都没问题,因为换另一种读入AC了!所以就可能是读入问题了。

//------------偶是朴素的分界线------------------

const max=maxint*100;

var i,j,n,m,k,g,h:longint;

s:string;

a,b,e:array[0..500] of string;

d:array[0..500,0..500] of longint;

f:ansistring;

function find(s:string):longint;

var i,j:longint;

t:string;

begin

s:=' '+s+' ';

j:=length(s);

i:=pos(s,f);

t:=copy(f,i+j,255);

i:=pos(' ',t);

delete(t,i,255);

val(t,j);

exit(j);

end;

begin

readln(m); f:=' '; n:=0; h:=0;

fillchar(d,sizeof(d),0);

for i:=1 to 100 do

for j:=1 to 100 do d[i,j]:=max+1;

for i:=1 to m do

begin

readln(s);

//-----------------------

j:=pos(' ',s);

a[i]:=copy(s,1,j-1);

delete(s,1,j);

j:=pos(' ',s);

b[i]:=copy(s,1,j-1);

delete(s,1,j);

val(s,k);

//-----------------------

g:=pos(' '+a[i]+' ',f);

if (g=0) then

begin

inc(n);

if (a[i]='ZMC')and(h=0) then h:=n;

f:=f+a[i]+' '+chr(n+48)+' ';

e[n]:=a[i];

end;

//-----------------------

g:=pos(' '+b[i]+' ',f);

if (g=0) then

begin

inc(n);

if (b[i]='ZMC')and(h=0) then h:=n;

f:=f+b[i]+' '+chr(n+48)+' ';

e[n]:=b[i];

end;

//-----------------------

if (k>-1) then d[find(a[i]),find(b[i])]:=k;

if (k=-1) then d[find(a[i]),find(b[i])]:=max;

if (k=-2) then d[find(a[i]),find(b[i])]:=max+1;

end;

for k:=1 to n do

for i:=1 to n do

for j:=1 to n do

if (i<>j)and(i<>k)and(j<>k) then

begin

g:=d[i,k]+d[k,j];

if (d[i,j]>g)and(d[i,k]<max)and(d[k,j]<max) then d[i,j]:=g;

if (d[i,j]=max+1)and

(((d[i,k]=max)and(d[k,j]<=max))or

((d[i,k]<=max)and(d[k,j]=max))) then d[i,j]:=max;

end;

s:=e[1]; k:=d[1,h];

for i:=2 to n do

if (i<>h) then

if (d[i,h]>k)or((d[i,h]=k)and(e[i]<s)) then

begin

k:=d[i,h]; s:=e[i];

end;

if (k=max) then k:=-1;

if (k=max+1) then k:=-2;

writeln(s,' ',k);

end.

#1 烨毅@2012-02-23 21:05:00
回复 删除
哎,找到问题了,f:=f+a[i]+' '+chr(n+48)+' ';

这个语句只能转换单个字符,所以数据大于9就出错了。

把语句改为:

str(n,s);

f:=f+a[i]+' '+s+' ';

这样就能AC了!!

查看更多回复
提交回复