如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。

URAL/1012

来自"NOCOW"

跳转到: 导航, 搜索

递推+高精=AC!



type bt=array[0..10000]of longint;

var f:array[0..2]of bt;

   s:bt;
   n,k,i:longint;

procedure add(a,b:bt;var c:bt); var i,x:longint; begin

   i:=1;
   x:=0;
   while (i<=a[0]) or(i<=b[0]) do begin
   x:=a[i]+b[i]+x div 10;
   c[i]:=x mod 10;
   inc(i);
   end;
   c[0]:=i;
   if x div 10=0 then dec(c[0])
   else c[i]:=x div 10;

end; procedure mul(a:bt;var c:bt); var i,x:longint; begin

   for i:=1 to c[0] do c[i]:=0;
   x:=0;
   for i:=1 to a[0] do begin
   x:=a[i]*(k-1)+x div 10+c[i];
   c[i]:=x mod 10;
   end;
   c[i+1]:=x div 10;
   c[0]:=a[0]+1;
   while (c[c[0]]=0)and(c[0]>1) do dec(c[0]);

end; begin

   readln(n);
   readln(k);
   f[0,0]:=1;
   f[0,1]:=1;
   f[1,0]:=1;
   f[1,1]:=k-1;
   for i:=2 to n do begin
   add(f[(i-1) mod 3],f[(i-2)mod 3],s);;
   mul(s,f[i mod 3]);
   end;
   for i:=f[n mod 3,0] downto 2 do write(f[n mod 3,i]);
   writeln(f[n mod 3,1]);

end. // by lv.wind

个人工具