| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这题分明欺负PASCAL的------内容完全一样的两个程序中只有C++的能过。PASCAL:
program p2827(input,output);
const maxh=54117;
var h,y:array[0..maxh] of longint;
f,len:array[1..20000] of longint;
fa,fb,i,m,n,a,b,c,tmp:longint;
function hash(r:longint):longint;
var i:longint;
begin
i:=r mod maxh;
while (h[i]<>-1)and(h[i]<>r) do
i:=(i+1)mod maxh;
if h[i]=-1 then begin
h[i]:=r;
inc(m);
y[i]:=m;
end;
hash:=y[i];
end;
function father(r:longint):longint;
var tmp:longint;
begin
if f[r]<=0 then
father:=r
else begin
tmp:=f[r];
f[r]:=father(f[r]);
inc(len[r],len[tmp]);
father:=f[r];
end;
end;
begin
while not seekeof(input) do begin
readln(n);
m:=0;
fillchar(h,sizeof(h),255);
fillchar(f,sizeof(f),0);
fillchar(len,sizeof(len),0);
for i:=1 to n do begin
readln(a,b,c);
if a>b then begin
tmp:=a;
a:=b;
b:=tmp;
end;
a:=hash(a-1);
b:=hash(b);
fa:=father(a);
fb:=father(b);
if fa=fb then
if len[a]-len[b]=c then
writeln('Accept')
else
writeln('Bug Detected ',len[a]-len[b])
else begin
writeln('Accept');
f[fa]:=fb;
len[fa]:=c-(len[a]-len[b]);
end;
end;
end;
end.
C++(感谢UPDOG为我把PASCAL程序转化C++程序):
#include <stdio.h>
#include <string.h>
const int maxh=54117;
int h[maxh+1],y[maxh+1];
int f[20000+1],len[20000+1];
int fa,fb,i,m,n,a,b,c,tmp;
int hash( int r )
{
int i=r%maxh;
while( h[i]!=-1 && h[i]!=r ) i=(i+1)%maxh;
if( h[i]==-1 ) { h[i]=r; m++; y[i]=m; }
return y[i];
}
int father( int r )
{
int tmp;
if( f[r]<=0 ) return r;
else
{
tmp=f[r]; f[r]=father(f[r]);
len[r]+=len[tmp];
return f[r];
}
}
int main()
{
while( scanf("%d",&n)!=EOF )
{
m=0;
memset( h, 255, sizeof(h) );
memset( f, 0, sizeof(f) );
memset( len, 0, sizeof(len) );
for( i=1; i<=n; i++ )
{
scanf("%d%d%d",&a,&b,&c);
if( a>b ) { tmp=a; a=b; b=tmp; }
a=hash(a-1);
b=hash(b);
fa=father(a); fb=father(b);
if( fa==fb )
if( len[a]-len[b]==c ) puts("Accept");
else printf("Bug Detected %d\n",len[a]-len[b]);
else
{
puts("Accept");
f[fa]=fb;
len[fa]=c-(len[a]-len[b]);
}
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator