多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 互聯(lián)網(wǎng) > hdu 4099 Revenge of Fibonacci(字典樹)

hdu 4099 Revenge of Fibonacci(字典樹)

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-11-17 08:25:17 閱讀次數(shù):2645次

題目鏈接:hdu 4099 Revenge of Fibonacci

題目大意:給定1個(gè)前綴,找到最小的n,保證f(n)包括前綴。f為斐波那契數(shù)列,要求n小于100000。

解題思路:大數(shù)加法,對(duì)100000之內(nèi)的斐波那契數(shù)預(yù)處理出前綴,這里處理的時(shí)候只需要對(duì)前50位進(jìn)行加法處理即

可,否則復(fù)雜度太高,由于查詢的長(zhǎng)度不會(huì)超過(guò)40。然后建立字典樹,查詢則在字典樹上進(jìn)行搜索。

#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e6 + 5; const int sigma_size = 10; struct Bign { int c, s[maxn]; Bign() {} void operator = (int a) { c = 0; memset(s, 0, sizeof(s)); while (a) { s[c++] = a % 10; a /= 10; } } void put() { for (int i = 1; i <= 40 && i <= c; i++) printf("%d", s[c-i]); printf(" "); } }num[3]; void add(const Bign& a, const Bign& b, Bign& ans) { int tmp = 0; ans.c = max(a.c, b.c); for (int i = max(min(a.c, b.c) - 50, 0); i < a.c || i < b.c; i++) { if (i < a.c) tmp += a.s[i]; if (i < b.c) tmp += b.s[i]; ans.s[i] = tmp % 10; tmp /= 10; } while (tmp) { ans.s[ans.c++] = tmp % 10; tmp /= 10; } } struct Tire { int sz, g[maxn * 10][sigma_size]; int val[maxn * 10]; void init(); int find(char* s); void insert(const Bign& a, int x); }T; void init () { num[0] = 1; num[1] = 1; T.init(); T.insert(num[0], 1); T.insert(num[1], 2); int t = 2; for (int i = 2; i < 100000; i++) { add(num[(t+1)%3], num[(t+2)%3], num[t]); T.insert(num[t], i + 1); t = (t + 1) % 3; } } int main () { init(); int cas; char s[60];; scanf("%d", &cas); for (int kcas = 1; kcas <= cas; kcas++) { scanf("%s", s); printf("Case #%d: %d ", kcas, T.find(s) - 1); } return 0; } void Tire::init() { sz = 1; val[0] = 0; memset(g[0], 0, sizeof(g[0])); } int Tire::find(char* s) { int n = strlen(s), u = 0; for (int i = 0; i < n; i++) { int v = s[i] - '0'; if (g[u][v] == 0) return 0; u = g[u][v]; } return val[u]; } void Tire::insert(const Bign& a, int x) { int u = 0; for (int i = 1; i <= 40 && i <= a.c; i++) { int v = a.s[a.c - i]; if (g[u][v] == 0) { val[sz] = x; memset(g[sz], 0, sizeof(g[sz])); g[u][v] = sz++; } u = g[u][v]; } }
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 最近更新中文字幕免费版 | 欧美一级h | www日本在线观看 | 亚洲精品播放 | 日韩欧美国产一区二区三区四区 | 亚洲老女人 | 亚洲欧美另类日韩 | 久草在线香蕉 | 欧美综合自拍亚洲综合 | 亚洲国产成人久久综合一区 | 欧美人成片免费看视频不卡 | 香蕉超级碰碰碰97视频在线观看 | 国产成人久久精品麻豆二区 | 亚洲欧洲无码一区二区三区 | 成人国产在线不卡视频 | 尤物国产在线 | 在线亚洲播放 | 亚洲综合图区 | 亚洲人成网站在线观看播放 | 国产欧美久久一区二区 | 久久国产免费一区 | 国产高清乱码无卡女大生 | 中文字幕在线播 | 真实国产乱人伦在线视频播放 | 欧美 日本 | 一区二区影视 | 亚洲最大黄色 | 亚洲在线一区二区 | 亚洲图片自拍偷拍 | v天堂在线观看 | 最新国产福利在线观看 | 色播成人网 | 国产精品久久久久久免费 | 欧美日韩在线播一区二区三区 | 激情欧美一区二区三区 | 亚洲精品一区二区久久 | 一本之道| 中文字幕一区二区三区久久网站 | 日本高清com| 天天澡天天碰天天狠伊人五月 | 国产亚洲精品资源在线26u |