牛客網 NC200607 A-解鎖專家 斐波那契數列

1. 題目描述

1.1. Limit

Time Limit: 1000 ms

Memory Limit: 262144 kB

1.2. Problem Description

阿炳是一個精通文理的小機靈鬼,它是一個解鎖專家,也是一個詩人。一天,阿炳受邀前往黃臺甫馬哈那坤棄他哇勞狄希阿由他亞馬哈底陸浦歐叻辣塔尼布黎隆烏冬帕拉查尼衛馬哈灑坦,也就是今天俗稱的曼谷,解一個被文字鎖鎖住的寶箱。

文字鎖是這樣描述的,對於給定的一個nn,問存在多少正整數x滿足:

  1. x>0x>0
  2. xx 二進制位的位數不超過 nn,例如 5=101(2)5=101(2),它的二進制位的位數就是33
  3. xx 的二進制形式,不存在連續的兩個二進制位上的數都是 1。例如 3=11(2)3=11(2),則不滿足條件,但是 5=101(2)5=101(2) 則滿足條件。

阿炳思考了5分鐘後,望着山下的美景,不禁寫起了詩:
飛花兩岸照船紅,
波光山色兩盈盈。
那年私語小窗邊,
妾心陌上悠揚蝶。
原來阿炳不會解,爲了掩飾尷尬,只好作詩緩解一些尷尬的氣氛,阿炳作爲一個知名解鎖專家,當然是要面子的嘛,所以,阿炳請你幫幫他解決這個問題。


1.3. Input

多測試數據樣例,測試樣例組數不超過10000。

每組數據一行,一個數 n1n100n(1 \le n \le 100)


1.4. Output

每組數據輸出一個數,滿足條件的正整數 xx 的個數取模 433494437(即答案需要 %433494437)


1.5. Sample Input

1
3

1.6. Sample Output

1
4

1.7. Notes

n=1n=1時,只有 x=1x=1 滿足條件。

n=3n=3時,有 x=1(001),x=2(010),x=4(100),x=5(101)x=1(001), x=2(010), x=4(100), x=5(101) 共4種情況。

1.8. Source

牛客網 NC200607 A-解鎖專家


2. 解讀

將前幾個數字列出來,和斐波那契數列一對比,會發現這就是斐波那契數列的變形。遞推方程爲f(n)=f(n1)+f(n2)+1f(n) = f(n-1) + f(n-2) + 1,初始條件爲 f(0)=0f(0) = 0f(1)=1f(1) = 1

Table 1. 樣例數據分析 \text{Table 1. 樣例數據分析}

nn 二進制數位 結果 斐波那契
1 (0)B(0)_B 1 1
2 (00)B(00)_B 2 1
3 (000)B(000)_B 4 3
4 (0000)B(0000)_B 7 5
5 (00000)B(00000)_B 12 8
6 (000000)B(000000)_B 20 13
7 (0000000)B(0000000)_B 33 21
8 (00000000)B(00000000)_B 54 34

3. 代碼

#include<iostream>
#include<algorithm>
const long long num = 1e2 + 1;
using namespace std;

long long list[num];

// 通過遞推方程進行計算
void calculate(int n){
    list[0] = 0;
    list[1] = 1;
    for(int i = 2; i <= n; i++){
        list[i] = (list[i-1] + list[i-2] + 1)% 433494437;
    }
}

int main(){
    long long n;
    long long ans = 0;
    calculate(num-1);
    // 輸入
    while(scanf("%lld", &n) != EOF){
        ans = list[n];
        printf("%lld\n", ans);
    }
}

聯繫郵箱:[email protected]

Github:https://github.com/CurrenWong

歡迎轉載/Star/Fork,有問題歡迎通過郵箱交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章