zoukankan      html  css  js  c++  java
  • bestcoder#28 1002 dfs

    bestcoder#28 1002  dfs

    Fibonacci

    Accepts: 40
    Submissions: 996
    Time Limit: 2000/1000 MS (Java/Others)
    Memory Limit: 65536/65536 K (Java/Others)
    Problem Description

    Following is the recursive definition of Fibonacci sequence:

    Fi=⎧⎩⎨01Fi1+Fi2i = 0i = 1i > 1
    Now we need to check whether a number can be expressed as the product of numbers in the Fibonacci sequence.
    Input

    There is a number (T) shows there are (T) test cases below. (T100,000) For each test case , the first line contains a integers n , which means the number need to be checked. 0n1,000,000,000

    Output

    For each case output "Yes" or "No".

    Sample Input
    3
    4
    17
    233
    Sample Output
    Yes
    No
    Yes

    题意:判断n是否为一个或多个fib数的乘积
    思路:dfs,从大数往小数遍历更省时
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    const int maxn=1000100;
    const int INF=1000000000;
    
    int T;
    int n;
    vector<int> fib;
    
    inline int read()
    {
        char c=getchar();
        while(c!='-'&&!isdigit(c)) c=getchar();
        int f=0,tag=1;
        if(c=='-'){
            tag=-1;
            f=getchar()-'0';
        }
        else f=c-'0';
        while(isdigit(c=getchar())) f=f*10+c-'0';
        return f*tag;
    }
    
    void creat_fib()
    {
        fib.clear();
        fib.push_back(0);
        fib.push_back(1);
        int x=fib[0]+fib[1];
        while(x<=INF&&x>=0){
            fib.push_back(x);
            x=fib[fib.size()-1]+fib[fib.size()-2];
        }
    }
    
    bool dfs(int n,int t)
    {
        if(t==2) return false;
        while(true){
            if(dfs(n,t-1)) return true;
            if(n%fib[t]) break;
            n/=fib[t];
        }
        if(n==1) return true;
        return false;
    }
    
    int main()
    {
        cin>>T;
        creat_fib();
        while(T--){
            n=read();
            if(n==0||n==1||dfs(n,fib.size()-1)) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    View Code
    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    SVN使用之分支、合并
    eq相等 ,ne、neq不相等 EL表达式
    PLSQL:plsql中文乱码,显示问号
    mysql中实现行号,oracle中的rowid
    安装完QQ必须要删除掉的几个恐怖文件
    关于table的一些兼容性问题
    Javascript事件绑定的几种方式
    jQuery中的一些正则匹配表达式
    将java类的泛型集合转换成json对象
    python登录豆瓣,发帖
  • 原文地址:https://www.cnblogs.com/--560/p/4358647.html
Copyright © 2011-2022 走看看