勘測 牛客小白月賽10
阿新 • • 發佈:2018-12-30
連結:https://ac.nowcoder.com/acm/contest/280/A
來源:牛客網
題解: 斐波拉契數列,(增量是斐波拉契), 遞推式:d[i]=d[i-1]+p[i-1];
第i天等於前i-1天的再加上 由i-1變到i的增量
式子中的p[] 是斐波拉契 2 3 5 8~~~把每一天的二叉樹畫出來,很明瞭
有時間畫個圖放上面。qwq
程式碼
#include <iostream> using namespace std; #define int long long const int maxn=6e6+5; #define mod 10000000007 int d[maxn]; int p[maxn]; void init(){ d[1]=2; d[2]=3; for(int i=3;i<=maxn;i++){ d[i]=(d[i-1]+d[i-2])%mod; } } void f(){ p[1]=1; for(int i=2;i<=maxn;i++){ p[i]=(p[i-1]+d[i-1])%mod; } } signed main(){ int n; init(); f(); cin>>n; cout<<p[n]<<endl; return 0; }
題目描述
Actci偶然發現了一個礦洞,這個礦洞的結構類似與一棵二叉樹,Actci發現的礦洞恰好位於根節點處,為了儘快挖掘,Actci找來了她的小夥伴們來幫忙,由於地質原因,每天小夥伴們只能打通到一條到子節點的道路(不消耗時間),也就是說每天一個節點只能向一個子節點建設道路,走一條路需要一天的時間,當發現一條道路後,會有一部分小夥伴選擇留下來繼續勘測,假設小夥伴們有無數個,樹的深度足夠大,問第n天最多共建設幾條道路。
輸入描述:
一行,一個數n。
輸出描述:
一行,一個數表示最多建設的道路數,答案對 10000000007 取模。
示例1
輸入
2
輸出
3
說明
樣例解釋: 設n號點的子節點編號為n×2和n×2+1,根節點編號為1. 第一天1->2,在1,2處留有一部分人,道路數為1。 第二天1->3,2->4,在2,3,4處留有人,道路數為3.
示例2
輸入
100
輸出
6531708670
備註:
資料範圍: