輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個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...