[FJOI2007]轮状病毒

来源:互联网 发布:信贷抢单软件 编辑:程序博客网 时间:2024/05/01 09:07

Time Limit: 1Sec  Memory Limit:162 MB
Description

[FJOI2007]轮状病毒给定n(N<=100),编程计算有多少个不同的n轮状病毒。

Input

第一行有1个正整数n。

Output

将编程计算出的不同的n轮状病毒数输出

Sample Input

3

Sample Output

16
找规律题+高精。水题其实。规律见http://hi.baidu.com/oichampion/blog/item/e6d9885cde79a290810a1853.html
错误:在做高精乘的时候把y=0放在两重循环之外了。。。
 
 
AC CODE
 
program hy_1002;
typety=array[0..100]of longint;
vara:array[1..100]of ty;
    n,i:longint;
    b:ty;
//============================================================================
functioncheng(k:longint):ty;
varx,y,i:longint;
begin
  y:=0;fillchar(cheng,sizeof(cheng),0);
  fori:=1 toa[k][0]do
  begin
    x:=3*a[k][i]+y;
    cheng[i]:=xmod 10; y:=xdiv 10;
  end;cheng[0]:=a[k][0];
  ify>0then
  begin
    inc(cheng[0]);
    cheng[cheng[0]]:=y;
  end;
end;
//============================================================================
function jian(a,b:ty):ty;
varx,i:longint;
begin
  fillchar(jian,sizeof(jian),0);
  fori:=1 toa[0] do
  begin
    x:=a[i]-b[i];
    ifx<0then
    begin
      jian[i]:=x+10;
      dec(a[i+1]);
    endelse jian[i]:=x;
  end;jian[0]:=a[0];
  ifa[a[0]]=0thendec(jian[0]);
end;
//============================================================================
functionmulti(k:longint;p:boolean):ty;
varx,y,i,j:longint;
begin
  fillchar(multi,sizeof(multi),0);
  fori:=1 toa[k][0]do
  begin
    y:=0         //每一次都要赋为0!
    forj:=1 toa[k][0]do
    begin
      x:=multi[i+j-1]+a[k][i]*a[k][j]+y;
      multi[i+j-1]:=xmod 10; y:=xdiv 10;
    end;
    ify>0 thenmulti[i+j]:=y;
  end;multi[0]:=a[k][0]*2-1;
  ify>0then
  begin
    inc(multi[0]);
    multi[multi[0]]:=y;
  end;
  y:=0;
  ifp then
  fori:=1 tomulti[0]do
  begin
    x:=multi[i]*5+y;
    multi[i]:=xmod 10; y:=xdiv 10;
  end;
  ify>0then
  begin
    inc(multi[0]);
    multi[multi[0]]:=y;
  end;
end;
//============================================================================
begin
  readln(n);
  a[1][1]:=1;
  ifn mod2=1 thena[2][1]:=4elsea[2][1]:=3;
  a[1][0]:=1;a[2][0]:=1;
  fori:=3 to(n+1) div2 do
  begin
    b:=cheng(i-1);a[i]:=jian(b,a[i-2]);
  end;
  b:=multi((n+1)div2,not(odd(n)));
  fori:=b[0] downto1 dowrite(b[i]);
  writeln;
end.
0 0
原创粉丝点击