您的位置:首页 > 其它

bzoj 1002 找规律(基尔霍夫矩阵)

2013-11-23 09:52 225 查看
  网上说的是什么基尔霍夫矩阵,没学过这个,打个表找下规律,发现

w[i]=3*w[i-1]-w[i-2]+2;

然后写个高精直接递推就行了

//By BLADEVIL
var
n                    :longint;
a, b, c                :array[0..100000] of longint;
w                    :array[0..200] of ansistring;
i                    :longint;

function plus(s1,s2:ansistring):ansistring;
var
len                    :longint;
i                    :longint;
s                    :ansistring;

begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
len:=length(s1);
for i:=1 to len do a[(len-i) div 4+1]:=a[(len-i) div 4+1]*10+ord(s1[i])-48;
len:=length(s2);
for i:=1 to len do b[(len-i) div 4+1]:=b[(len-i) div 4+1]*10+ord(s2[i])-48;
if length(s1)>len then len:=length(s1);
len:=(len+3) div 4;
for i:=1 to len do
begin
c[i]:=c[i]+a[i]+b[i];
c[i+1]:=c[i+1]+c[i] div 10000;
c[i]:=c[i] mod 10000;
end;
inc(len);
plus:='';
for i:=len downto 1 do
begin
str(c[i],s);
if c[i]<1000 then plus:=plus+'0';
if c[i]<100 then plus:=plus+'0';
if c[i]<10 then plus:=plus+'0';
plus:=plus+s;
end;
while (plus[1]='0') and (length(plus)>1) do delete(plus,1,1);
end;

function jian(s1,s2:ansistring):ansistring;
var
len                    :longint;
i                    :longint;
s                    :ansistring;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
len:=length(s1);
for i:=1 to len do a[(len-i) div 4+1]:=a[(len-i) div 4+1]*10+ord(s1[i])-48;
len:=length(s2);
for i:=1 to len do b[(len-i) div 4+1]:=b[(len-i) div 4+1]*10+ord(s2[i])-48;
len:=(length(s1)+3) div 4;
for i:=1 to len do c[i]:=a[i]-b[i];
for i:=1 to len do if c[i]<0 then
begin
c[i]:=c[i]+10000;
dec(c[i+1]);
end;
jian:='';
for i:=len downto 1 do
begin
str(c[i],s);
if c[i]<1000 then jian:=jian+'0';
if c[i]<100 then jian:=jian+'0';
if c[i]<10 then jian:=jian+'0';
jian:=jian+s;
end;
while (jian[1]='0') and (length(jian)>1) do delete(jian,1,1);
end;

begin
read(n);
w[1]:='1'; w[2]:='5';
for i:=3 to n do
w[i]:=plus(jian(plus(plus(w[i-1],w[i-1]),w[i-1]),w[i-2]),'2');
writeln(w
);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: