program project1;
var
rule:array [0..9] of longint;
a:array [1..100] of longint;
s,s2:string;
i,j,k,len:longint;
from,too:longint;
begin
readln(s);
k:=pos(’ ’,s);
s2:=copy(s,k+1,length(s)-k);
s:=copy(s,1,k-1);
val(s2,k);
for i:=0 to 9 do rule[i]:=1;
for i:=1 to k do
begin
readln(from,too);
inc(rule[from]);
end;
a[1]:=1; len:=1;
for i:=1 to length(s) do
begin
k:=ord(s[i])-48;
for j:=1 to len do
begin
a[j]:=a[j]*rule[k];
a[j]:=a[j]+a[j-1] div 10;
a[j-1]:=a[j-1] mod 10;
end;
while a[len]>=10 do
begin
inc(len);
a[len]:=a[len-1] div 10;
a[len-1]:=a[len-1] mod 10;
end;
end;
for i:=len downto 1 do
write(a[i]);
readln; readln;
end.
for i:=0 to 9 do
for j:=0 to 9 do
if i<>j then G[i,j]:=G[i,j] or G[i,k] and G[k,j];
沃舍尔算法可以帮助我们求出所有的传递闭包~
状态: [color=red]Unaccepted [/color]
测评机: Xeond[6]
得分: 60分
提交日期: 2008-10-24 13:11:00
有效耗时: 438毫秒
测试结果1: [color=green]通过本测试点|有效耗时171:ms[/color]
测试结果2: [color=green]通过本测试点|有效耗时47:ms[/color]
测试结果3: [color=green]通过本测试点|有效耗时63:ms[/color]
测试结果4: [color=red]输出过少|用户输出数据少于标准输出的50%[标准输出14位|选手输出6位][/color]
测试结果5: 测试结果错误.错误结果为:19672689770496
正确结果应为:3427648537559040000000
测试结果6: [color=green]通过本测试点|有效耗时47:ms[/color]
测试结果7: [color=green]通过本测试点|有效耗时47:ms[/color]
测试结果8: [color=green]通过本测试点|有效耗时63:ms[/color]
测试结果9: [color=red]输出过少|用户输出数据少于标准输出的50%[标准输出14位|选手输出6位][/color]
测试结果10: 测试结果错误.错误结果为:19672689770496
正确结果应为:3427648537559040000000
提交代码: program project1;
var
b:array [0..9,0..9] of longint;
rule:array [0..9] of longint;
a:array [1..100] of longint;
s,s2:string;
i,j,m,k,len:longint;
from,too:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a)
else exit(b);
end;
begin
readln(s);
k:=pos(’ ’,s);
s2:=copy(s,k+1,length(s)-k);
s:=copy(s,1,k-1);
val(s2,k);
fillchar(b,sizeof(b),0);
for i:=0 to 9 do rule[i]:=1;
for i:=1 to k do
begin
readln(from,too);
b[from,too]:=1;
end;
for m:=0 to 9 do
for i:=0 to 9 do
for j:=0 to 9 do
if (i<>j) and (b[i,j]=0) and (b[i,k]>0) and (b[k,j]>0)
then b[i,j]:=1;
for i:=0 to 9 do
begin
for j:=0 to 9 do
if b[i,j]>0 then inc(rule[i]);
end;
a[1]:=1; len:=1;
for i:=1 to length(s) do
begin
k:=ord(s[i])-48;
for j:=1 to len do
begin
a[j]:=a[j]*rule[k];
a[j]:=a[j]+a[j-1] div 10;
a[j-1]:=a[j-1] mod 10;
end;
while a[len]>=10 do
begin
inc(len);
a[len]:=a[len-1] div 10;
a[len-1]:=a[len-1] mod 10;
end;
end;
for i:=len downto 1 do
write(a[i]);
readln; readln;
end.
附最新源代码,各位大牛注意了:
program project1;
var
b:array [0..9,0..9] of int64;
rule:array [0..9] of int64;
a:array [1..100] of int64;
s,s2:string;
i,j,m,k,len:longint;
from,too:longint;
function max(a,b:int64):int64;
begin
if a>b then exit(a)
else exit(b);
end;
begin
readln(s);
k:=pos(’ ’,s);
s2:=copy(s,k+1,length(s)-k);
s:=copy(s,1,k-1);
val(s2,k);
fillchar(b,sizeof(b),0);
for i:=0 to 9 do rule[i]:=1;
for i:=1 to k do
begin
readln(from,too);
b[from,too]:=1;
end;
for m:=0 to 9 do
for i:=0 to 9 do
for j:=0 to 9 do
if (i<>j) and (b[i,j]=0) and (b[i,k]>0) and (b[k,j]>0)
then b[i,j]:=1;
for i:=0 to 9 do
begin
for j:=0 to 9 do
if b[i,j]>0 then inc(rule[i]);
end;
a[1]:=1; len:=1;
for i:=1 to length(s) do
begin
k:=ord(s[i])-48;
for j:=1 to len do
begin
a[j]:=a[j]*rule[k];
a[j]:=a[j]+a[j-1] div 10;
a[j-1]:=a[j-1] mod 10;
end;
while a[len]>=10 do
begin
inc(len);
a[len]:=a[len-1] div 10;
a[len-1]:=a[len-1] mod 10;
end;
end;
for i:=len downto 1 do
write(a[i]);
readln; readln;
end.
计算答案时 可定义 ans:real; 然后做乘法运算 最后write(ans:0:0);即可
不必用高精度