題意:
給出乙個數字n,在斐波那契數列中找到乙個最小下標,滿足這個斐波那契數是以n為字首,輸出這個下標。
思路:
高精度+字典樹+1000000000000000進製。後來知道在斐波那契數很大的時候,只取前60位相加得到的前40位就是原斐波那契數的前40位。
**:
#include #include #include #include using namespace std;
typedef long long ll;
const ll mod = 1000000000000000;
const int m = 2000;
ll b[10][m + 10];
const int maxn = 10000005;
int tire[maxn][11];
int flag[maxn];
int tot;
void init2()
void add(string s, int rt, int nn)
rt = tire[rt][x];
}}int cal(string s, int rt)
rt = tire[rt][x];
}return flag[rt];
}void print(int n, int nn) else
} for(int j = 0; str[j]; j++)
} if(f1) break;
} add(s, 0, nn);
//cout << s << " " << nn << endl;
}int a(int x)
void init()
for(int j = m; j >= 0; j--)
print(now,nn++); }}
int main()
}
HDU4099 斐波那契數列與字典樹
題目 revenge of fibonacci 題意 給出斐波那契數列的前k位,k不超過40,找出最小的正整數n,滿足f n 的前k位與給定數的前k位相同,斐波那契數列的項數不超過100000。解析 本題可以分為兩步 第一步就是預處理出100000項斐波那契數列的前40位,插入到字典樹中。第二步就是...
HDU4099 斐波那契數列與字典樹
題目 revenge of fibonacci 題意 給出斐波那契數列的前k位,k不超過40,找出最小的正整數n,滿足f n 的前k位與給定數的前k位相同,斐波那契數列的項數不超過100000。解析 本題可以分為兩步 第一步就是預處理出100000項斐波那契數列的前40位,插入到字典樹中。第二步就是...
HDU 4786 斐波那契生成樹
這道題的意思是給你一些邊,某些邊被染成黑色,還有一些邊被染成白色,現在問你沒有乙個生成樹他的白邊的數量是斐波那契數列中的數,我們可以先選黑邊得到最最小的白邊數,先選白邊得到最大的白邊數,然後看看這個區間有沒有斐波那契數即可,注意沒有生成樹時的情況。如下 include include include...