题解

123 条题解

  • 0
    @ 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

  • 0
    @ 2009-11-10 14:54:33

    第一位 转成 0 怎么办呢~~~~~·

  • 0
    @ 2009-11-08 20:20:43

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    program 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]

  • 0
    @ 2009-11-06 21:34:16

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    切,连extened都不用,real照样过

  • 0
    @ 2009-11-06 11:40:00

    qword 都不够- - 害我交几遍..!!!

  • 0
    @ 2009-10-29 21:04:53

    .悲剧。水题交了三遍。。

    总喜欢把0遗忘。。

    for i:=1 to n do

    g:=true;

    改成

    for i:=0 to n do

    g:=true;

    AC...

  • 0
    @ 2009-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

  • 0
    @ 2009-10-24 00:16:02

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    终于AC了!

    中途错了好几个地方。。。一个是变量名重叠,还有就是高精度处理的时候对0的处理(其实我沙茶了,由于一个错误导致最后一个点没过,我以为要用高精,EXTENDED精度不够)

  • 0
    @ 2009-10-23 20:57:59

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    注意FLOYED算法,K在最外层!!!!!

    我就是因为这个,才WA的

    另外这个题目就水了

  • 0
    @ 2009-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.

  • 0
    @ 2009-10-04 21:47:09

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    构图+DFS+高精=ACms



    为啥是Floyd?

  • 0
    @ 2009-09-19 11:09:34

    没想到这道题交了3次...-.-

    我明明记得要处理0的,可是puppy无情的告诉我,我没有处理....

    哎,原来真的没处理啊 !!!!

    粗心...

  • 0
    @ 2009-09-14 19:06:06

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    EXTENDED是个好东西!!!

  • 0
    @ 2009-09-09 14:32:59

    水到死........

  • 0
    @ 2009-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.

  • 0
    @ 2009-08-24 09:47:18

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var 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

  • 0
    @ 2009-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' 那位牛告诉我?

  • 0
    @ 2009-08-17 23:47:20

    无奈,FLOYD K循环放到最里面去了,T_T。

    FLOYD传递闭包,然后算出某个数可能变成的数的个数。

    扫描所给的数字,把每位这个数字上面算出来的可变成其他数的个数用高精度乘起来就好了。

  • 0
    @ 2009-08-16 14:30:52

    floyd+高精度+递推

  • 0
    @ 2009-08-15 17:28:02

    60

信息

ID
1129
难度
6
分类
高精度 点击显示
标签
递交数
3872
已通过
1107
通过率
29%
被复制
26
上传者