首页 > 其他 > 详细

洛谷P4994 终于结束的起点

时间:2019-01-03 22:14:45      阅读:146      评论:0      收藏:0      [点我收藏+]

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

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;
}

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

洛谷P4994 终于结束的起点

原文:https://www.cnblogs.com/iycc/p/10217101.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!