幻魔皇拉比艾爾很喜歡斐波那契樹,他想找到神奇的節點對。
所謂斐波那契樹,根是乙個白色節點,每個白色節點都有乙個黑色節點兒子,而每個黑色節點則有乙個白色和乙個黑色節點兒子。神奇的節點對則是指白色節點對。
請問對於深度為n的斐波那契樹,其中距離為i的神奇節點對有多少個?拉比艾爾需要你對於1<=i<=2n的所有i都求出答案。
先看到題目的關鍵字「斐波那契」,就很容易要往斐波那契數列的方向思考。
構建出一顆這樣的樹後可以找到乙個神奇的規律:每一層的白色節點個數是乙個斐波那契數列,只是在前面多了兩項。而黑色節點個數則是正統的斐波那契數列。對於一對白色節點,可以分為兩種情況。第一種:lca為乙個白色節點,即兩個點無分叉關係;第二種情況的lca為乙個黑色節點。
對於第一種情況很明顯是當前層節點個數它子樹的組合。
對於第二種情況就還要列舉乙個lca左邊節點的深度,計算答案也基本相同。 設f
i 表示從某乙個節點開始,向下走i的深度後,對應層的白色節點個數,ti
表示fi
的字首和(c++選手可以直接列舉計和,pascal選手不打容易超時),gi
表示第i層的黑色節點個數,si
表示gi
的字首和。為了方便處理,我們可以把n減1,深度從0開始。
先從第一種情況入手:
因為我們預處理出的fi
是對於任意白色節點而言定義都相同,所以列舉出深度以後,都用合法的開始節點個數乘上從此往下走i步的白色節點數,即fi
∗tn−
i 。
第二種情況稍顯複雜:
首先要想到的是左右相乘,即lca左邊的節點乘上右邊的節點,但是這樣子直接做可能會有重複,所以要研究一下斐波那契數列在這道題目的性質:fi
bi=f
ibi−
1+fi
bi−2
,而這道題中,這兩項就意味著兩個子節點,所以可以用左邊的一半乘上右邊的一半,就能夠避免重複了。
const mo=123456789;
var f,g,s,t:array[0..5005] of int64;
n,i,j,mj,st:longint;
ans:int64;
function
min(x,y:longint):longint;
begin
if xthen
exit(x);exit(y);
end;
function
max(x,y:longint):longint;
begin
if x>y then
exit(x);exit(y);
end;
begin
readln(n);
mj:=2*n; dec(n);
f[0]:=1;t[0]:=1;t[1]:=1;g[1]:=1;s[1]:=1;
for i:=2
to n do
begin
f[i]:=f[i-1]+f[i-2];
if f[i]>=mo then dec(f[i],mo);
t[i]:=t[i-1]+f[i];
if t[i]>=mo then dec(t[i],mo);
g[i]:=g[i-1]+g[i-2];
if g[i]>=mo then dec(g[i],mo);
s[i]:=s[i-1]+g[i];
if s[i]>=mo then dec(s[i],mo);
end;
for i:=1
to mj do
//deep
begin
ans:=0;
if n-i>=0
then ans:=t[n-i]*f[i] mod mo;
st:=1;
if i>n then st:=i-n;
for j:=st to min(i-1,n) do
ans:=(ans+(f[j]*f[i-j-1] mod mo)*s[min(n-j,n-i+j)]) mod mo;
write(ans,' ');
end;
writeln;
end.
NOIP2017提高組模擬12 10 幻魔皇
description 幻魔皇拉比艾爾很喜歡斐波那契樹,他想找到神奇的節點對。所謂斐波那契樹,根是乙個白色節點,每個白色節點都有乙個黑色節點兒子,而每個黑色節點則有乙個白色和乙個黑色節點兒子。神奇的節點對則是指白色節點對。請問對於深度為n的斐波那契樹,其中距離為i的神奇節點對有多少個?拉比艾爾需要你...
NOIP2017提高組模擬12 10 幻魔皇
幻魔皇拉比艾爾很喜歡斐波那契樹,他想找到神奇的節點對。所謂斐波那契樹,根是乙個白色節點,每個白色節點都有乙個黑色節點兒子,而每個黑色節點則有乙個白色和乙個黑色節點兒子。神奇的節點對則是指白色節點對。請問對於深度為n的斐波那契樹,其中距離為i的神奇節點對有多少個?拉比艾爾需要你對於1 i 2n的所有i...
NOIP2015提高組 神奇的幻方
noip2015 提高組 day1 t1 幻方是一種很神奇的 n n 矩陣 它由數字 1,2,3,n n 構成,且每行 每列及兩條對角線上的數字之和都相同。當 n 為奇數時,我們可以通過以下方法構建乙個幻方 首先將 1 寫在第一行的中間。之後,按如下方式從小到大依次填寫每個數 k k 2,3,n n...