您的位置:首页 > 其它

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

2015-06-07 12:07 519 查看
[FJOI2007]轮状病毒

时间限制: 1 Sec 内存限制: 128 MB

题目描述

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



输入

第一行有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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: