• 洛谷P4994 终于结束的起点


    希望是这道题的第一篇题解,并且真的做到了!

    upd 2018/11/4:规律补锅,让代码更加易懂


    本来月赛时想打个表,打到一半,发现(n)稳定在(m)附近?

    题目的意思是(n < m ^ 2),实际上(n < kn, k approx 6)

    所以暴力即可,然后……

    记得开longlong,不开longlong爆零见祖宗

    code:

    #include <cstdio>
    #include <vector>
    #define ll long long
    
    int main()
    {
        ll n = 1, m;
        // 此处的n没什么用,后面会用f.size()
        scanf("%lld", &m);
        std :: vector < ll > f;
        f.push_back(0);
        f.push_back(1);
        for(; f[f.size() - 2] != 0 || f[f.size() - 1] != 1 || f.size() == 2;)
            f.push_back((f[f.size() - 2] + f[f.size() - 1]) % m);
        // for循环写的有些诡异……不过仔细研究一下就明白了
        // 提醒:f.size() == 2时,f(0) == 0, f(1) == 1,但0不是正整数
        printf("%lld", f.size() - 2);
        // f.size() - 2,因为要求的是f(n) == 0 && f(n + 1) == 1 , 而不是f(n - 1) == 0 && f(n) == 1
        return 0;
    }
    

    虽然代码还是很丑,但是总比上一次的代码好看多了

  • 相关阅读:
    1、TensorFlow简介
    4、numpy+pandas速查手册
    3、pandas
    2、Numpy常用函数
    11、C内存四区模型
    1、Numpy基础
    10、C++函数
    开始
    创建与删除SQL约束或字段约束
    Halcon
  • 原文地址:https://www.cnblogs.com/iycc/p/10217101.html
Copyright © 2020-2023  润新知