日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu4099(斐波那契数+字典树)

發布時間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu4099(斐波那契数+字典树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

給出一個數字n,在斐波那契數列中找到一個最小下標,滿足這個斐波那契數是以n為前綴,輸出這個下標。


思路:

高精度+字典樹+1000000000000000進制。后來知道在斐波那契數很大的時候,只取前60位相加得到的前40位就是原斐波那契數的前40位。


代碼:

#include <iostream> #include <cstdio> #include <map> #include <cstring> 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() {memset(tire, 0, sizeof(tire));memset(flag, -1, sizeof(flag));tot = 1; } void add(string s, int rt, int nn) {for(int i = 0; s[i]; i++) {int x = s[i] - '0';if(tire[rt][x] == 0) {tire[rt][x] = tot++;flag[tire[rt][x]] = nn;}rt = tire[rt][x];} } int cal(string s, int rt) {for(int i = 0; s[i]; i++) {int x = s[i] - '0';if(tire[rt][x] == 0) {return -1;}rt = tire[rt][x];}return flag[rt]; } void print(int n, int nn) {bool flag = false;string s = "";bool f1 = false;int k = 0;for(int i = 0; i <= m; i++) {char str[20] = "";if(flag) {sprintf(str,"%015lld", b[n][i]);} else {if(b[n][i] != 0) {sprintf(str,"%lld", b[n][i]);flag = true;}}for(int j = 0; str[j]; j++) {s += str[j]; k++;if(k >= 40) {f1 = true;break;}}if(f1) break;}add(s, 0, nn); //cout << s << " " << nn << endl; } int A(int x) {if(x % 3 == 0) return 3;return x % 3; } void init() {int nn = 0;b[1][m] = 1;print(1, nn++);b[2][m] = 1;print(2, nn++);for(int i = 3; i <= 100000; i++) {int now = A(i); int a1 = A(i - 1 + 3); int a2 = A(i - 2 + 3);for(int j = m; j >= 0; j--) {b[now][j] = b[a1][j] + b[a2][j];}for(int j = m; j >= 0; j--) {b[now][j - 1] += b[now][j] / mod;b[now][j] %= mod;}print(now,nn++);} }int main() {init2();init();int t;scanf("%d",&t);for(int k = 1; k <= t; k++) {string s;cin >> s;printf("Case #%d: %d\n", k,cal(s,0));} }

總結

以上是生活随笔為你收集整理的hdu4099(斐波那契数+字典树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。