• 牛客网小白月赛 10 A B C


       小白月赛越来越不小白了,也可能是我越来越菜了

       a题

       Actci偶然发现了一个矿洞,这个矿洞的结构类似与一棵二叉树,Actci发现的矿洞恰好位于根节点处,为了尽快挖掘,Actci找来了她的小伙伴们来帮忙,由于地质原因,每天小伙伴们只能打通到一条到子节点的道路(不消耗时间),也就是说每天一个节点只能向一个子节点建设道路,走一条路需要一天的时间,当发现一条道路后,会有一部分小伙伴选择留下来继续勘测,假设小伙伴们有无数个,树的深度足够大,问第n天最多共建设几条道路。

       思路 :打表或者画图 找规律 发现是斐波拉契数列求和。

      

    #include <bits/stdc++.h>
    using namespace std;
    const long long mod=10000000007;
    long long f[5000005];
    int main()
    {
        long long n;
        cin>>n;
        f[1]=1;
        f[2]=2;
        for(int i=3;i<=n;i++){
            f[i]=f[i-1]+f[i-2];
            f[i]=(f[i]+mod)%mod;
        }
        long long ans=0;
        for(int i=1;i<=n;i++) ans=(ans+f[i])%mod;
        cout<<ans<<endl;
        return 0;
    }

      b题 也算是找规律吧

        某年某月某天的数学课上,Actci正在遨游宇宙呢,对于他的屡教不改,她的数学老师决定难为一下Actci,将他叫醒。

    “咳咳,我现在给出一个数a(0a1010000),判断a是否是3,5,8,11中某些数的的倍数,你只有一秒钟的时间,答不上来的话,呵,%#W$%@#$@...”。
    作为他后桌的你怎么能看着Actci“受害”呢,于是你决定帮帮他。
      思路 :对于string的判断,如果被3整除的话,应该每位之和能被3整除,被5整除的话是末位能够被5整除,被8整除,要求个位十位百位所构成的数,能够被8整除,被11整除,是奇数位和偶数位之差能够被11整除
      
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,m;
        string s;
        cin>>s;
        int sum=0;
        int sum1=0,sum2=0;
        int flag=0;
        for(int i=0;i<s.length();i++){
            if(i%2==0) sum1+=s[i]-'0';
            else sum2+=s[i]-'0';
            sum+=s[i]-'0';
        }
        int t=0;
        int length=s.length();
        t+=s[length-3]-'0';
        t*=10;
        t+=s[length-2]-'0';
        t*=10;
        t+=s[length-1]-'0';
        int num[5];
        if(sum%3==0) num[flag++]=3;
        if((s[s.length()-1]-'0')%5==0) num[flag++]=5;
        if(t%8==0) num[flag++]=8;
        if(abs(sum1-sum2)%11==0) num[flag++]=11;
        if(flag){
            cout<<"Yes"<<endl;
            for(int i=0;i<flag;i++) cout<<num[i]<<' ';
        }
        else cout<<"No"<<endl;
        return 0;
    }

      C题过的人挺多的,但是总感觉时间复杂度有点问题,数据爆int

      Actci上课睡了一觉,下课屁颠屁颠的去找数学老师补课,问了老师一个题目:
          给出两个数a,b,问a和b的全部公约数是什么?
      数学老师一看这道题太简单了,不屑回答,于是就交给了你。对于100%的数据,1 ≤ a,b ≤ 10^13

      思路: 就是先求出这两个数的gcd然后进行质因数分解。直接暴力莽就对了

      

    #include <bits/stdc++.h>
    using namespace std;
    long long gcd(long long a,long long b){
        return b==0?a:gcd(b,a%b);
    }
    int main()
    {
        long long n,m;
        cin>>n>>m;
        long long t=gcd(n,m);
        //long long s=(n/t)*m;
        set<long long> num;
        for(long long i=1;i*i<=t;i++){
            if(t%i==0){
                num.insert(i);
                num.insert(t/i);
            }
        }
         for(set<long long>::iterator it=num.begin() ;it!=num.end();it++)
        {
            cout<<*it<<' ';
        }
        return 0;
    }
  • 相关阅读:
    Linux下Vim简单使用
    使用scp命令在Windows和Linux之间拷贝文件
    Linux下使用Crontab实现定时任务
    UOS商店提取软件包离线安装的解决方法
    【50条常用MySQL语句】如果这50条sql语句你都不熟,你别说你会MySQL【建议收藏】
    elasticsearch 7.5.0 windows版本包,已集成ik分词器和pinyin分词器
    Ubuntu安装配置redis
    精讲Mysql各种高难度Sql编写(一)
    Ubuntu离线安装SVN1.13.0(步骤+所需deb安装包)【测试通过】
    Typora提示The beta version of typora is expired, please download and install a newer version.解决办法
  • 原文地址:https://www.cnblogs.com/maybe96/p/10178188.html
Copyright © 2020-2023  润新知