bzoj1002 輪狀病毒 遞推 高精度

2021-07-30 16:50:37 字數 1802 閱讀 3409

輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子

和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示

n輪狀病毒的產生規律是在乙個n輪狀基中刪去若干條邊,使得各原子之間有唯一的資訊通道,例如共有16個不

同的3輪狀病毒,如下圖所示

現給定n(n<=100),程式設計計算有多少個不同的n輪狀病毒

第一行有1個正整數n

計算出的不同的n輪狀病毒數輸出316

做完之後到網上看了看題解。。

基爾霍夫矩陣。是什麼??

沒學過。。

反正  我就純暴力手算出了前幾個。。。(其實到第四個就數不下去了)

然後發(kan)現(ti)了(jie)規律。嗯哼。

貼下**。

var

i,j,k,t,n:longint;

f:array[1..500]of string;

s:string;

function jia(s:string;x:longint):string;

vari,j,k,t:longint;

begin

t:=x;

for i:=length(s) downto 1 do

begin

k:=ord(s[i])-48;

inc(k,t);

t:=0;

if k>=10 then begin dec(k,10);t:=1;end;

s[i]:=chr(k+48);

end;

if t=1 then s:='1'+s;

jia:=s;

end;

function jian(s1,s2:string):string;

vari,j,k,t,x,y:longint;

begin

while length(s2)=y then dec(x,y)

else begin inc(x,10);dec(x,y);t:=1;end;end

else

if x-1>=y then begin x:=x-1-y;t:=0;end

else begin inc(x,9);dec(x,y);t:=1;end;

s[i]:=chr(x+48);

end;

jian:=s;

end;

function cheng(s:string;x:longint):string;

vari,j,k,t:longint;

begin

t:=0;

for i:=length(s) downto 1 do

begin

k:=ord(s[i])-48;

k:=k*x+t;

t:=0;

if k>=10 then begin t:=k div 10;k:=k mod 10;end;

s[i]:=chr(k+48);

end;

if t<>0 then s:=chr(t+48)+s;

cheng:=s;

end;

begin

readln(n);

f[1]:='1';

f[2]:='5';

for i:=3 to n do

begin

s:=cheng(f[i-1],3);

s:=jian(s,f[i-2]);

s:=jia(s,2);

f[i]:=s;

end;

writeln(f[n]);

end.

蒟蒻**大神勿吐槽

BZOJ 1002 輪狀病毒

time limit 1 sec memory limit 162 mb submit status 給定n n 100 程式設計計算有多少個不同的n輪狀病毒。第一行有1個正整數n。將程式設計計算出的不同的n輪狀病毒數輸出 3 16 第一眼看上去,n 100 不錯 打表 於是就寫了乙個暴力搜尋 可是...

動態規劃 BZOJ 1002 輪狀病毒

time limit 1 sec memory limit 162 mb submit 1947 solved 1056 submit status 第一行有1個正整數n。將程式設計計算出的不同的n輪狀病毒數輸出 3 16題意 給出乙個n各節點的 輪子 圖,中間的節點不算入n中,你要選取一些邊,使得...

bzoj 1002 輪狀病毒 打表

一眼看到資料範圍,輸入只有1個n,n 100果斷打表。然而好像跑錶的複雜度不茲磁啊,要跑幾年。所以要打表找規律。include 這是小資料打表 include using namespace std struct eb 100005 int cnt,n int use 100005 int fa 1...