123 条题解
-
0deepfind LV 8 @ 2010-03-04 20:24:51
#include
#include
#include
#include
#include
long maxlen=30;
long len,m;
long a[31];
long f[10];
bool g[10][10];
FILE *fin;
long Input()
{
char st[31];
gets(st);
len=0;m=0;long i=0;
while(0=10)
{i++;}
while(i=0&∫(st[i])-48 -
02009-11-10 14:54:33@
第一位 转成 0 怎么办呢~~~~~·
-
02009-11-08 20:20:43@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram ex;
var i,j,n:longint;
s:ansistring;
f:array[0..9,0..9]of boolean;
count:array[1..100]of longint;
ans:array[0..5000]of int64;procedure init;
var i,j,x,y:longint;
begin
readln(s);
val(copy(s,pos(' ',s)+1,length(s)-pos(' ',s)),n);
delete(s,pos(' ',s),length(s)-pos(' ',s)+1);
fillchar(f,sizeof(f),false);
for i:=1 to n do
begin
readln(x,y);
f[x,y]:=true;
end;
end;procedure floyd;
var i,j,k:longint;
begin
for k:=0 to 9 do
for i:=0 to 9 do
for j:=0 to 9 do
f:=f or (f and f[k,j]);
end;procedure mul(a:longint);
var i,j:longint;
begin
for i:=1 to ans[0] do
ans[i]:=ans[i]*a;
for i:=1 to ans[0] do
begin
inc(ans,ans[i] div 10000);
ans[i]:=ans[i] mod 10000;
end;
while ans[ans[0]+1]>0 do
begin
inc(ans[0]);
inc(ans[ans[0]+1],ans[0]div 10000);
ans[0]:=ans[0] mod 10000;
end;
while (ans[ans[0]]=0)and(ans[0]>1) do dec(ans[0]);
end;procedure main;
var i,j,x:longint;
begin
ans[0]:=1;
ans[1]:=1;
for i:=1 to length(s) do
begin
val(s[i],x);
count[i]:=1;
for j:=0 to 9 do
if (xj) and f[x,j] then inc(count[i]);
mul(count[i]);
end;
end;procedure print;
var i,j:longint;
begin
write(ans[ans[0]]);
for i:=ans[0]-1 downto 1 do
begin
if ans[i] -
02009-11-06 21:34:16@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
切,连extened都不用,real照样过 -
02009-11-06 11:40:00@
qword 都不够- - 害我交几遍..!!!
-
02009-10-29 21:04:53@
.悲剧。水题交了三遍。。
总喜欢把0遗忘。。
for i:=1 to n do
g:=true;
改成for i:=0 to n do
g:=true;AC...
-
02009-10-24 20:00:46@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms构图:
若对于每一个有效的变换(Y0)
x-->y
在x于y之间连接一条有向边Floyd求出图的传递闭包。。。
然后乘法原理+高精度=AC -
02009-10-24 00:16:02@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms终于AC了!
中途错了好几个地方。。。一个是变量名重叠,还有就是高精度处理的时候对0的处理(其实我沙茶了,由于一个错误导致最后一个点没过,我以为要用高精,EXTENDED精度不够) -
02009-10-23 20:57:59@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
注意FLOYED算法,K在最外层!!!!!
我就是因为这个,才WA的
另外这个题目就水了 -
02009-10-11 21:12:32@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms用g[0..9,0..9]存储a能不能转换成b,用floyed先统计一下,然后使用乘法原理计算
program P1129;
var
p,i,j,k,x,y,tt,gg:longint;
st,t:string;
g:array[0..9,0..9]of boolean;
s:array[0..9]of integer;
begin
readln(st);
p:=pos(' ',st);
val(copy(st,p+1,length(st)-p),k,tt);
st:=copy(st,1,p-1);
for i:=1 to k do
begin
readln(x,y);
g[x,y]:=true;
end;
for i:=0 to 9 do
g:=true;
for k:=0 to 9 do
for i:=0 to 9 do
for j:=0 to 9 do
g:=g or(g and g[k,j]);
for i:=0 to 9 do
begin
s[i]:=0;
for j:=0 to 9 do
if g then s[i]:=s[i]+1;
end;
t:='1';
for i:=1 to length(st) do
begin
k:=s[ord(st[i])-48];gg:=0;
for j:=length(t) downto 1 do
begin
x:=ord(t[j])-48;
y:=x*k+gg;
gg:=y div 10;
y:=y mod 10;
t[j]:=chr(y+48);
end;
if gg0 then t:=chr(gg+48)+t;
end;
writeln(t);
end. -
02009-10-04 21:47:09@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms构图+DFS+高精=ACms
?
为啥是Floyd? -
02009-09-19 11:09:34@
没想到这道题交了3次...-.-
我明明记得要处理0的,可是puppy无情的告诉我,我没有处理....
哎,原来真的没处理啊 !!!!
粗心... -
02009-09-14 19:06:06@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
EXTENDED是个好东西!!! -
02009-09-09 14:32:59@
水到死........
-
02009-08-25 22:14:44@
读入字符串
处理每一位,计算深度.然后再高精度乘.只需要乘1..9
所以是比较简单的高精度...这道题VIJOS数据很弱。不用高精度~用双精度实型或者拓展实型也能过。。
type ar=array[1..10000]of longint;
var st:string; a:array[0..200,0..200]of longint;
t,x,y,i,u,k,j,w,n,m,s:longint; b:array[0..1000]of boolean;
gj,bb:ar; ch:char;
procedure init;
begin
read(ch);
while ch' ' do
begin
st:=st+ch;
read(ch);
end; readln(n);
m:=length(st);
// readln(st); readln(n);
for i:=1 to n do begin readln(x,y); a[x,y]:=1; end;
end;
procedure gjd(s:longint);
var i,j,k,m:longint;
c:ar;
begin
fillchar(c,sizeof(c),0);
k:=1;
for i:=1 to w do
begin
gj[i]:=gj[i]*s;
if gj[i]>=10 then
begin
c:=gj[i] div 10;
gj[i]:=(gj[i] mod 10);
end;
end;
if c[w+1]>0 then inc(w);
for i:=1 to w do
begin
inc(gj[i],c[i]);
if gj[i]>=10 then
begin inc(gj); dec(gj[i],10);if gj[w+1]0 then inc(w); end;
end;
end;
procedure process(x:integer);
var i,j:longint;
begin
b[x]:=true;
for i:=1 to 9 do
if(a[x,i]0)
and(not(b[i]))
then begin
inc(s);
process(i);
end;
end;
procedure insert(s:longint);
begin
inc(t); bb[t]:=s;
end;
begin
init; w:=1; gj[w]:=1;
for i:=1 to m do
begin
k:=ord(st[i])-48;
s:=1; fillchar(b,sizeof(b),false);
process(k); insert(s);
inc(u);
end;
j:=1;
for i:=1 to t do gjd(bb[i]);
begin
for i:=w downto 2 do write(gj[i]);
writeln(gj[1]); end;
end. -
02009-08-24 09:47:18@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar st:string;
x,y,a:array[-3..100000]of longint;
f:array[-3..1000,-3..1000]of boolean;
i,j,n,m,k,e,w:longint;
g:extended;
ch:char;
begin
n:=0;
read(ch);
while ch' ' do
begin
inc(n);
a[n]:=ord(ch)-ord('0');
read(ch);
end;
readln(m);
for i:=1 to m do
begin
readln(x[i],y[i]);
f[x[i],y[i]]:=true;
end;
for i:=0 to 9 do f:=true;
for k:=0 to 9 do
for i:=0 to 9 do
for j:=0 to 9 do
if (f)or((f)and(f[k,j])) then f:=true;
g:=1;
for i:=1 to n do
begin
e:=0;
for j:=0 to 9 do
if f[a[i],j] then inc(e);
g:=g*e;
end;
write(g:0:0);
end.
FLOYD+乘法原理 AC -
02009-08-20 17:49:15@
for p:=0 to 9 do
for i:=0 to 9 do if ip then
for j:=0 to 9 do if ij then
为什么要加‘ip'和‘ij' 那位牛告诉我? -
02009-08-17 23:47:20@
无奈,FLOYD K循环放到最里面去了,T_T。
FLOYD传递闭包,然后算出某个数可能变成的数的个数。
扫描所给的数字,把每位这个数字上面算出来的可变成其他数的个数用高精度乘起来就好了。
-
02009-08-16 14:30:52@
floyd+高精度+递推
-
02009-08-15 17:28:02@
60