/ Vijos / 题库 / 循环 /

题解

104 条题解

  • 0
    @ 2009-09-19 19:41:29

    什么世道

    一定要用字符串读入?!

    汗……

    害我交了n次

  • 0
    @ 2009-09-19 17:42:07

    瀑布汗!!!

  • 0
    @ 2009-09-17 20:10:05

    哥切的不是题,是寂寞。

  • 0
    @ 2009-09-13 11:26:58

    program p1032;

    type arr=array[0..1000] of longint;

    var

    i,j,k,l,m,n:longint;

    cn,a,d,dt,b:arr;

    s:string;

    procedure mul(var d:arr;a:arr);

    var

    i,j,t:longint;

    c:arr;

    begin

    fillchar(c,sizeof(c),0);

    for i:=1 to k do

    for j:=1 to k-i+1 do

    inc(c,d[i]*a[j]);

    for i:=1 to k do

    begin

    inc(c,c[i] div 10);

    c[i]:=c[i] mod 10;

    end;

    d:=c;

    end;

    begin

    readln(s);

    l:=pos(' ',s);

    fillchar(a,sizeof(a),0);

    for i:=l-1 downto 1 do

    val(s[i],a[l-i],m);

    a[0]:=l-1;

    val(copy(s,l+1,length(s)),k,m);

    cn[0]:=1;cn[1]:=1;

    d:=a;

    for i:=1 to k do

    begin

    m:=0;

    b:=a;

    fillchar(dt,sizeof(dt),0);dt[1]:=1;

    repeat

    inc(m);

    mul(b,d);

    mul(dt,d);

    until (m>10) or (b[i]=a[i]);

    if m>10 then break;

    for j:=1 to cn[0] do cn[j]:=cn[j]*m;

    for j:=1 to cn[0] do

    begin

    inc(cn[j+1],cn[j] div 10);

    cn[j]:=cn[j] mod 10;

    end;

    if cn[cn[0]+1]>0 then inc(cn[0]);

    d:=dt;

    end;

    if m>10

    then write(-1)

    else for i:=cn[0] downto 1 do write(cn[i]);

    writeln;

    end.

  • 0
    @ 2009-09-10 23:47:59

    是我太垃圾、、

  • 0
    @ 2009-08-26 11:37:17

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

    写得太丑了。

  • 0
    @ 2009-08-25 22:56:30

    编译通过...

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

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

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

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

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

    ├ 测试数据 06:答案正确... 9ms

    ├ 测试数据 07:答案正确... 41ms

    ├ 测试数据 08:答案正确... 25ms

    ├ 测试数据 09:答案正确... 56ms

    ├ 测试数据 10:答案正确... 56ms

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

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

    好慢啊。

    高精度加法+高精度乘法+倍增法=崩溃

    乘法只要保存K位就可以,不然超时等着你。

  • 0
    @ 2009-08-13 10:42:36

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

    用楼上讲过的方法,同时使用快速幂等方法优化,然后如果人品好遇上puppy,那么就是秒杀!!!

  • 0
    @ 2009-08-09 23:17:27

    编译通过...

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

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

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

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

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

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

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

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

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

    ├ 测试数据 10:答案正确... 9ms

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

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

    Congratulations!!10AC~~

  • 0
    @ 2009-07-31 09:51:58

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

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

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

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

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

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

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

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

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

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

    测了6次

    改了6!次

    达到了秒杀的效果

    高精的优化很重要

    因为位数只到k

    因此与k无关的可以统统卡掉

  • 0
    @ 2009-07-19 09:20:22

    编译通过...

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

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

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

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

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

    ├ 测试数据 06:答案正确... 88ms

    ├ 测试数据 07:答案正确... 103ms

    ├ 测试数据 08:答案正确... 88ms

    ├ 测试数据 09:答案正确... 119ms

    ├ 测试数据 10:答案正确... 150ms

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

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

    我的怎么这么慢。。囧rz...

  • 0
    @ 2009-07-17 18:06:56

    编译通过...

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

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

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

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

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

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

    ├ 测试数据 07:答案正确... 9ms

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

    ├ 测试数据 09:答案正确... 25ms

    ├ 测试数据 10:答案正确... 41ms

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

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

    世上最难题,我想了五六个晚上!!!

    ╮(╯▽╰)╭

    楼下的,我过了啊

  • 0
    @ 2009-08-12 11:12:37

    编译通过...

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

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

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

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

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

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

    ├ 测试数据 07:答案正确... 25ms

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

    ├ 测试数据 09:答案正确... 25ms

    ├ 测试数据 10:答案正确... 41ms

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

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

    过了哟 (*^__^*) 嘻嘻…… 虽然不是秒杀%…

    交了7次。。。

    题解

    http://chengchen2008.blog.163.com/blog/static/28346475200971211728508/

  • 0
    @ 2009-07-10 10:32:35

    沙茶题留名……

  • 0
    @ 2009-07-02 16:18:02

    汗....交了4次才AC..第三次居然交了没有在FP里保存的半成品.......-_-|||.....第680个AC..~~特此纪念..`~

  • 0
    @ 2009-06-04 21:05:06

    const

    max=101;

    type

    rec=record

      len:integer;

      num:array[0..max] of integer;

    end;

    var

    n,ans,di,ji,temp:rec;

    i,k:integer;

    procedure init;

    var

    s,s1:string;

    begin

    readln(s);

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

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

    n.len:=length(s1);

    val(s,k);

    for i:=1 to n.len do

      n.num[n.len-i+1]:=ord(s1[i])-48;

    if n.len>k then n.len:=k;

    end;

    procedure gjdcf(var a:rec;b:rec);

    var

    i,j,m:integer;

    begin

    for i:=a.len downto 1 do

      begin

       for j:=b.len downto 2 do

        begin

         m:=i+j-1;

         if m9) do

      begin

       a.num:=a.num+a.num[i] div 10;

       a.num[i]:=a.num[i] mod 10;

       inc(i);

      end;

    a.len:=i;

    end;

    procedure dfs(t:integer);

    begin

    if t=1 then

       begin

       di:=temp;

       exit;

       end;

    dfs(t div 2);

    gjdcf(di,di);

    if t mod 2=1 then gjdcf(di,temp);

    end;

    procedure work;

    var

    i,ci:integer;

    begin

    di:=n;

    fillchar(ans,sizeof(ans),0);

    ans.len:=1;

    ans.num[1]:=1;

    ci:=0;

    for i:=1 to k do

      begin

       ji:=n;

       ci:=0;

       while (ji.num[i]n.num[i]) or (ci=0) do

        begin

         gjdcf(ji, di);

         inc(ci);

         if ci>10 then

          begin

           writeln(-1);

           halt;

          end;

        end;

       ch(ans,ci);

       temp:=di;

       dfs(ci);

      end;

    end;

    begin

    init;

    work;

    for i:=ans.len downto 1 do

      write(ans.num[i]);

    writeln;

    end.

  • 0
    @ 2009-03-28 21:12:07

    此乃好题也!

    150题纪念..

  • 0
    @ 2009-03-02 16:42:12

    const

    max=101;

    type

    rec=record

    len:integer;

    num:array[0..max] of integer;

    end;

    var

    n,ans,di,ji,temp:rec;

    i,k:integer;

    procedure init;

    var

    s,s1:string;

    begin

    readln(s);

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

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

    n.len:=length(s1);

    val(s,k);

    for i:=1 to n.len do

    n.num[n.len-i+1]:=ord(s1[i])-48;

    if n.len>k then n.len:=k;

    end;

    procedure gjdcf(var a:rec;b:rec);

    var

    i,j,m:integer;

    begin

    for i:=a.len downto 1 do

    begin

    for j:=b.len downto 2 do

    begin

    m:=i+j-1;

    if m9) do

    begin

    a.num:=a.num+a.num[i] div 10;

    a.num[i]:=a.num[i] mod 10;

    inc(i);

    end;

    a.len:=i;

    end;

    procedure dfs(t:integer);

    begin

    if t=1 then

    begin

    di:=temp;

    exit;

    end;

    dfs(t div 2);

    gjdcf(di,di);

    if t mod 2=1 then gjdcf(di,temp);

    end;

    procedure work;

    var

    i,ci:integer;

    begin

    di:=n;

    fillchar(ans,sizeof(ans),0);

    ans.len:=1;

    ans.num[1]:=1;

    ci:=0;

    for i:=1 to k do

    begin

    ji:=n;

    ci:=0;

    while (ji.num[i]n.num[i]) or (ci=0) do

    begin

    gjdcf(ji, di);

    inc(ci);

    if ci>10 then

    begin

    writeln(-1);

    halt;

    end;

    end;

    ch(ans,ci);

    temp:=di;

    dfs(ci);

    end;

    end;

    begin

    init;

    work;

    for i:=ans.len downto 1 do

    write(ans.num[i]);

    writeln;

    end.

  • 0
    @ 2009-03-01 10:20:38

    答案也是高精度啊。

    WA在此了。

  • 0
    @ 2009-02-25 22:08:07

    不想多说什么了,做得快哭出来了……

信息

ID
1032
难度
7
分类
高精度 点击显示
标签
递交数
4111
已通过
879
通过率
21%
被复制
35
上传者