【预处理】 HDU 5167 Fibonacci

来源:互联网 发布:新手怎么申请淘宝店铺 编辑:程序博客网 时间:2024/05/17 09:26

点击打开链接

判断一个数是不是几个斐波那契数的积(可重复)

预处理出所有的值,二分查找

#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <iostream>#include <algorithm>#include <sstream>#include <cmath>using namespace std;#include <queue>#include <stack>#include <set>#include <vector>#include <deque>#include <map>#define cler(arr, val)    memset(arr, val, sizeof(arr))typedef long long  LL;const int MAXN = 110;const int MAXM = 140000;const int INF = 0x3f3f3f3f;const LL mod = 10000007;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int f[48];LL x;vector<LL>v;void dfs(LL x,int dep){    v.push_back(x);    if(dep>43) return ;    for(int i=dep; i<=43; i++)    {        LL tmp=x*f[i];        if(tmp>(LL)1000000000) break;        dfs(tmp,i);    }}int main(){    f[0]=1,f[1]=1;    for(int i=2; i<=43; i++)        f[i]=f[i-1]+f[i-2];    int n;    v.clear();    v.push_back(0);    dfs(1,2);    sort(v.begin(),v.end());    cin>>n;    vector<LL>::iterator it;    while(n--)    {        cin>>x;        it=lower_bound(v.begin(),v.end(),x);        if(it!=v.end()&&*it==x)            puts("Yes");        else puts("No");    }    return 0;}


0 0
原创粉丝点击