题解

123 条题解

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

    编译通过...

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

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

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

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

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

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

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

    var

    str,sy,sk,s:string;

    k,i,j,l,v:longint;

    change:array[1..15,1..2]of longint;

    b:array[0..9]of longint;

    ans:extended;

    procedure dfs(n:longint);

    var

    u:longint;

    begin

    if b[n]=1 then exit;

    b[n]:=1;

    for u:=1 to k do

    if change[1]=n then

    dfs(change[2]);

    end;

    begin

    readln(str);

    sy:='';

    sk:='';

    for i:=1 to length(str) do if str[i]=' ' then j:=i;

    for i:=1 to j-1 do sy:=sy+str[i];

    for i:=j+1 to length(str) do sk:=sk+str[i];

    val(sk,k,j);

    for i:=1 to k do readln(change[i][1],change[i][2]);

    for i:=1 to length(sy) do

    begin

    s:='';

    s:=s+sy[i];

    val(s,j,l);

    fillchar(b,sizeof(b),0);

    dfs(j);

    if i1 then

    begin

    v:=0;

    for l:=0 to 9 do if b[l]=1 then inc(v);

    ans:=ans*v;

    end

    else

    begin

    v:=0;

    for l:=1 to 9 do if b[l]=1 then inc(v);

    ans:=v;

    end;

    end;

    writeln(ans:0:0);

    end.

  • 0
    @ 2009-08-12 09:11:47

    编译通过...

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

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

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

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

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

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

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

    所谓规则的右部不能为0是为了防止最后的产生数的最高位为0

  • 0
    @ 2009-08-03 18:06:35

    var n,s:string;

    ans:double;

    f:array[0..9] of longint;

    x,y,i,j,p,k:integer;

    b:array[0..9,0..9] of boolean;

    begin

    readln(s);

    n:=copy(s,1,pos(' ',s)-1);

    delete(s,1,pos(' ',s));

    val(s,k);

    for i:=1 to k do

    begin readln(x,y); b[x,y]:=true; end;

    for p:=0 to 9 do

    for i:=0 to 9 do if ip then

    for j:=0 to 9 do if ij then

    if b and b[p,j] then b:=true;

    for i:=0 to 9 do

    for j:=0 to 9 do

    if b then inc(f[i]);

    ans:=1;

    for i:=1 to length(n) do

    ans:=ans*(f[ord(n[i])-48]+1);

    writeln(ans:0:0);

    end.

  • 0
    @ 2009-07-31 10:14:59

    {超短}

    program leo;

    var n,s:string;

    ans:double;

    f:array[0..9] of longint;

    x,y,i,j,p,k:integer;

    b:array[0..9,0..9] of boolean;

    begin

    readln(s);

    n:=copy(s,1,pos(' ',s)-1);

    delete(s,1,pos(' ',s));

    val(s,k);

    for i:=1 to k do

    begin readln(x,y); b[x,y]:=true; end;

    for p:=0 to 9 do

    for i:=0 to 9 do if ip then

    for j:=0 to 9 do if ij then

    if b and b[p,j] then b:=true;

    for i:=0 to 9 do

    for j:=0 to 9 do

    if b then inc(f[i]);

    ans:=1;

    for i:=1 to length(n) do

    ans:=ans*(f[ord(n[i])-48]+1);

    writeln(ans:0:0);

    end.

  • 0
    @ 2009-07-29 13:51:07

    #include

    #include

    using namespace std;

    int map[20][20],map1[20][20],b[100],len;

    int num=0,kp;

    void dfs1(int a)

    {

    int i;

    for(i=0;i

  • 0
    @ 2009-07-27 09:15:22

    编译通过...

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

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

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

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

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

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

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

    var

    n1,k1,n:string;

    s:double;

    f:array[0..100] of longint;

    i,j,p,k:integer;

    b:array[0..100,0..100] of boolean;

    a:array[1..100,1..2] of integer;

    begin

    readln;

    readln;

    readln(n1); n:=' ';

    i:=1;

    while n1[i]' ' do begin n:=n+n1[i]; inc(i); end;

    k1:='';

    for j:=i+1 to length(n1) do k1:=k1+n1[j];

    val(k1,k);

    fillchar(b,sizeof(b),false);

    for i:=1 to k do begin

    readln(a,a);

    b[a,a]:=true;

    end;

    for p:=0 to 9 do

    for i:=0 to 9 do

    for j:=0 to 9 do

    begin

    if (i=p)1or1(i=j)or(j=p) then continue;

    if b and b[p,j] then b:=true;

    end;

    for i:=0 to 9 do

    for j:=0 to 9 do

    if b th1en inc(f[i]);

    s:=1;

    for i:=1 to length(n) do

    if n[i]' ' then s:=s*(f[ord(n[i])-48]+1);

    writeln(s:0:0);

    end.

  • 0
    @ 2009-07-20 23:24:30

    看似简单,细节地方真多,调的我都快发疯了。。。。。

    1、假设那个布尔数组是g,那么一定要设g[i][i] = true;而不是计数变量=1

    因为可能有这样的变态数据

    1 9

    9 1

    让g[i][i] 在floyd的时候为true,这样计数变量多加了一个。

    2、按理说高精度不应该犯错,但是还是没仔细思考。

    就是要先乘后进位,我边乘边进位是不行的。。。。。。

    看这里C++的代码太少发一个:

    #include

    using namespace std;

    int k,a[16],b[16],kk[10],r[10],ans[100],l(1);

    bool g[10][10];

    string n;

    void powx(int x,int y)

    {

    for(int i = 0;i < y;++i)

    {

    for(int j = 1;j > n >> k;

    for(int i = 0;i < k;++i) {cin >> a[i] >> b[i]; g[a[i]][b[i]]=true;}

    for(int k = 0;k < 10;++k)

    for(int i = 0;i < 10;++i)

    for(int j = 0;j < 10;++j)

    g[i][j]=g[i][j]||(g[i][k]&&g[k][j]);

    for(int i = 0;i < 10;++i)

    {

    g[i][i] = true;

    for(int j = 0;j < 10;++j) if(g[i][j]) ++kk[i];

    }

    for(int i = 0;i < n.length();++i) ++r[n[i]-'0'];

    ans[1] = 1;

    for(int i = 0;i < 10;++i) powx(kk[i],r[i]);

    for(int i = l;i >= 1;--i) cout

  • 0
    @ 2009-06-30 00:10:33

    耻辱啊 传递闭包写错了 调了快1个小时 ac率骤降2%

    传递闭包比较方便 但顺序千万不要写错!

  • 0
    @ 2009-05-29 09:20:16

    编译通过...

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

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

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

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

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

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

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

    好扯,竟然要extended才能过!

  • 0
    @ 2009-03-25 18:32:58

    double可是能表示到45位以上,再超就只能加‘e’了,虽然double是308

  • 0
    @ 2009-02-22 21:20:51

    第100道题AC,做个纪念!

  • 0
    @ 2009-02-02 12:14:19

    Type

    aa=array[0..9]of boolean;

    Var

    ma:array[0..9] of aa;

    ans:array[0..9] of integer;

    abc,i,j,pos1,n,code,data1,data2:longint;

    sn:real;

    a:array[1..30,1..2] of integer;

    str,str1:string;

    Procedure dfs(ac:integer);

    var

    i:integer;

    begin

    for i:=1 to n do

    if ma[ac][a] and not ma[ac][a] then

    begin

    inc(ans[ac]);

    ma[ac][a]:=true;

    dfs(ac);

    end;

    end;

    Begin

    readln(str);

    pos1:=pos(' ',str);

    str1:=copy(str,pos1+1,length(str));

    val(str1,n,code);

    delete(str,pos1,length(str));

    for i:=0 to 9 do begin ma[i][i]:=true;ans[i]:=1;end;

    for i:=1 to n do readln(a,a);

    for i:=0 to 9 do

    dfs(i);

    sn:=1;

    for i:=1 to length(str) do

    begin

    abc:=ord(str[i])-48;

    sn:=sn*ans[abc];

    end;

    writeln(sn:0:0);

    end.

    实型也是高精度阿……

  • 0
    @ 2009-01-17 14:16:45

    编译通过...

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

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

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

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

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

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

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

  • 0
    @ 2008-12-19 21:31:20

    var

    n1,k1,n:string;

    s:double;

    f:array[0..100] of longint;

    i,j,p,k:integer;

    b:array[0..100,0..100] of boolean;

    a:array[1..100,1..2] of integer;

    begin

    readln(n1); n:=' ';

    i:=1;

    while n1[i]' ' do begin n:=n+n1[i]; inc(i); end;

    k1:='';

    for j:=i+1 to length(n1) do k1:=k1+n1[j];

    val(k1,k);

    fillchar(b,sizeof(b),false);

    for i:=1 to k do begin

    readln(a,a);

    b[a,a]:=true;

    end;

    for p:=0 to 9 do

    for i:=0 to 9 do

    for j:=0 to 9 do

    begin

    if (i=p)or(i=j)or(j=p) then continue;

    if b and b[p,j] then b:=true;

    end;

    fillchar(f,sizeof(f),0);

    for i:=0 to 9 do

    for j:=0 to 9 do

    if b then inc(f[i]);

    s:=1;

    for i:=1 to length(n) do

    if n[i]' ' then s:=s*(f[ord(n[i])-48]+1);

    writeln(s:0:0);

    end.

    没用高精度,改用实型,直接AC

  • 0
    @ 2008-11-11 18:53:36

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

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

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

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

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

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

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

  • 0
    @ 2008-11-08 16:00:37

    编译通过...

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

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

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

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

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

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

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

  • 0
    @ 2008-10-29 17:41:24

    第二道改变代码风格后AC的题目

    纪念一下

  • 0
    @ 2008-10-27 17:23:28

    判断每一个数一共可以变成多少个数,然后根据乘法原理乘起来就行了。用F表示I这个数可以转换的数,那么ANSWER:=F[1]*F[2]*.....*F[N]。还要用个高精度

  • 0
    @ 2008-10-19 11:24:54

    我没有solution

  • 0
    @ 2008-10-19 10:05:53

    编译通过...

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

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

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

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

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

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

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

    这题被我刷下一个百分点!!!

信息

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