[高精度][BZOJ1002][FJOI2007]轮状病毒

[FJOI2007]轮状病毒
时间限制: 1 Sec 内存限制: 128 MB
题目描述
给定n(N<=100),编程计算有多少个不同的n轮状病毒。

Alt text

输入
第一行有1个正整数n。

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

样例输入
3
样例输出
16

题解

f[i]=(f[i-1]*3-f[i-2]+2)

var
 w:array[1..100,0..43]of longint;
 i,j:longint;
 n:longint;
procedure did(a:longint);
var last,i,b:longint;
begin
 last:=0; b:=0;
 for i:=1 to w[a-1,0] do
  begin
   b:=w[a-1,i]*3;
   w[a,i]:=(b+last) mod 10;
   last:=(b+last) div 10;
  end;
 if last<>0 then begin w[a,w[a-1,0]+1]:=last; w[a,0]:=w[a-1,0]+1; end
            else w[a,0]:=w[a-1,0];
 last:=0; b:=0;
 for i:=1 to w[a,0] do
  begin
   if i=1 then b:=w[a,i]+2
          else b:=w[a,i];
   w[a,i]:=(b+last) mod 10;
   last:=(b+last) div 10;
  end;
 if last<>0 then begin w[a,w[a,0]+1]:=last; inc(w[a,0]); end;
 last:=0; b:=0;
 for i:=1 to w[a,0] do
  begin
   if w[a,i]+last>=w[a-2,i] then begin w[a,i]:=w[a,i]+last-w[a-2,i]; last:=0; end
                       else
                        begin
                         b:=w[a,i]+10;
                         w[a,i]:=b+last-w[a-2,i];
                         last:=-1;
                        end;
  end;
end;
begin
 w[1,1]:=1; w[2,1]:=5;
 w[1,0]:=1; w[2,0]:=1;
 readln(n);
 for i:=3 to n do
  did(i);
 if w[n,w[n,0]]=0 then dec(w[n,0]);
 for j:=w[n,0] downto 1 do
  write(w[n,j]);
 writeln;
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值