HDU 4518 ac自動機+數位dp
吉哥系列故事——最終數
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 304 Accepted Submission(s): 102
Problem Description
在2012年騰訊編程馬拉松比賽中,吉哥解決了一道關於斐波那契的題目,這讓他非常高興,也更加燃起了它對數學特別是斐波那契數的熱愛。現在,它又在思考一個關於斐波那契的問題:
假如我們現在已知斐波那契數是1,1,2,3,5,8,13,21,34,55,89...
由於吉哥特別喜歡斐波那契數,它希望每個數中都包含斐波那契數,比如說130,其中包含了13,或者5534包含了55和34,只要數位中含有至少一個斐波那契數就是吉哥想要的數。但是這種數實在太多了,於是它去掉那些僅僅含有小於10的斐波那契數的數,比如說1,僅僅含有1,所以被去掉;或者335只含有3和5,都是小於10的斐波那契數,所以也去掉;但是131是留下的,因為它含有13,我們暫且稱這類數為F數,不難得到前幾個F數是 13 ,21, 34, 55, 89,113,121,130,131...
霸氣的吉哥覺得這樣還不夠,它想將斐波那契進行到底——在前面F數的基礎上,吉哥要得到那些是第斐波那契數個的F數!就是說,我們假設F數從1開始標號,那麼13是第1個F數,吉哥想要那些在F數中的排列或者說下標也要是斐波那契數的數,吉哥稱之為最終數,如13,21,34,89,130...
現在給你一個數n,吉哥想知道離n最近的最終數與n的差的絕對值是多少。
Input
輸入包含多組測試數據。
每組測試數據包含一個整數n ( 1 <= n <= 10^11);
若n = -1,表示輸入結束。
Output
對於每個n,請輸出離n最近的最終數與n的差的絕對值。
Sample Input
1
100
-1
Sample Output
12
11
Source
2013騰訊編程馬拉松初賽第三場(3月23日)
把斐波那契數列插入ac自動機,然後數位dp進行二分查找,
代碼:
/* ***********************************************
Author :rabbit
Created Time :2014/8/15 16:27:37
File Name :3.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include