zoukankan      html  css  js  c++  java
  • 牛牛想要成为hacker 题解(斐波那契构造)

    题目链接

    题目思路

    首先要知道斐波那契正是不能组成三角形并且增长速度最慢的数列。

    我比赛是直接构造斐波那契前40项然后后面的等差6765

    复杂度差不多是\(O(20n^2)\)

    .....后面想了一下是个锤子\(O(20n^2)\)

    其实是\(O(20C(n,2))=O(10n^2)\)

    却还是只能过88%

    有一说一感觉真的应该差不多了

    但是题目却是更优的构造方法

    前面不放1,后面全部放1

    这样可以达到差不多\(O(20n^2)\)

    自己代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
    const int eps=1e-6;
    int n,fac[maxn];
    signed main(){
        scanf("%d",&n);
        fac[1]=fac[2]=1;
        for(int i=3;i<=40;i++){
            fac[i]=fac[i-1]+fac[i-2];
        }
        for(int i=41;i<=n;i++){
            fac[i]=fac[i-1]+6765;
        }
        for(int i=1;i<=n;i++){
            printf("%d ",fac[i]);
        }
        return 0;
    }
    
    

    正确代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
    const int eps=1e-6;
    int n,fac[maxn];
    signed main(){
        scanf("%d",&n);
        fac[0]=1; fac[1]=2;
        for(int i=2;i<=40;i++){
            fac[i]=fac[i-1]+fac[i-2];
        }
        for(int i=41;i<=n;i++){
            fac[i]=1;
        }
        for(int i=1;i<=n;i++){
            printf("%d ",fac[i]);
        }
        return 0;
    }
    
    
    不摆烂了,写题
  • 相关阅读:
    Python 解决: from pip import main ImportError: cannot import name 'main'
    tensorflow学习笔记
    python多线程、多进程相关知识
    灰度发布相关
    自定义flume的hbase sink 的序列化程序
    pyspark数据准备
    利用pipeline批量插入数据到redis
    CentOS Linux系统下更改Apache默认网站目录
    更改nginx网站根目录
    chkconfig用法
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/14370397.html
Copyright © 2011-2022 走看看