zoukankan      html  css  js  c++  java
  • COJ 1082 Farmer John’s Cow

    本来想水过的,结果提交了2次都是WA,就沉下心了;

    类似fib数列,写出几项,可以猜测递推公式为f[n] = f[n-1] + 2×f[n-2],稍加分析:正确;

    稍作变形有:

    1.  f[n] + f[n-1] = 2×(f[n-1] + f[n-2])

    2.  f[n] - 2×f[n-1] = -(f[n-1] - 2×f[n-2])

    所以可以求出 f[n],这里使用第一个式子得到了f[n] + f[n-1] = 2^(n-1),所以 f[n] = 2^(n-1) - f[n-1],2的幂可以使用移位,没问题吧;

    题目中0<n<65,所以这样做会遇到2^63,超出了long long int,当然使用第2个式子相加的话是不会溢出的,改用unsigned long long int,问题来了:这样改了再提交将仍然是WA;

    问题出在移位运算上,实际上之前也碰到过了,这次又忘了:移位运算只限定在 int 型以内!,虽然没在书上看过,但这是实践的结论……

    # include <stdio.h>
     
    int main()
    {
        int n;
        unsigned long long int t = 1, f[65];
     
        f[1] = 1;
        for(n = 1; n < 64; ++n) 
            f[n+1] = (t *= 2)-f[n];
     
        while (~scanf("%d", &n))
            printf("%llu\n", f[n]);
     
        return 0;
    }

     

     

  • 相关阅读:
    java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport
    project configuration is not up-to-date with pom.xml
    消息列队5
    消息列队4
    消息列队3
    聊聊常见的数据库架构设计方案?
    消息队列2
    消息队列1
    搜索引擎5
    搜索引擎4
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2466636.html
Copyright © 2011-2022 走看看