HDU 6462 人类史上最大最好的希望事件(可能是道理解题吧)

该博客介绍了HDU 6462题目,涉及斐波那契数列的面积之和计算。通过理解题目,博主发现需要计算斐波那契数列每个数的平方所代表的正方形面积之和,并给出了前缀和的解题方法。博主还提到了数据取模可能导致的负数情况,并建议在处理此类问题时养成加模的习惯以避免错误。
摘要由CSDN通过智能技术生成

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6462

原版题解

先读懂题目。

我们有一个斐波那契数列 1 1 2 3 5 8 13

题目需要我们求所谓的面积之和

面积即为 1 1 4 9 25 64 169

然后一个简单的前缀和,计算面积和

然后斐波那契数列的平方和:

f1² + .....fn² = fn*fn+1

做题思路

1.  那个图是从最小的两个正方形中上面那个的左下角开始转的。

2.  0 + 0 ,1 + 0 这些的意思是这样的:x + y ,x表示转了几个完整的圈,y表示转了几个1/4圈

所以0+0->1+0,就是转了一整圈

3.  先打个表

我认为的坑点:

因为数据都mod过,可能会出现 prefix【i】-prefix【j】为负数的情况(即使i>j)

所以输出的时候相减加个mod再取余就不会WA。以后这种题目都加个mod吧,加了不可能错,不加却有可能。

养成好习惯,从你我做起呀。(WA哭了

代码

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 40000+10;
const ll mod = 192600817;
ll f[N];
ll prefix[N];
void getf()
{
    f[1] = f[2] =1;
    prefix[1] = 1;
    prefix[2] = 2;
    for (int i=3;i<N;i++){
        f[i] = (f[i-1]+f[i-2])%mod;
        prefix[i] = (prefix[i-1] + f[i]*f[i]%mod)%mod;
        ///prefix[i-1] = (f[i-1]*f[i])%mod;//这样求也可以
    }
}

int main()
{
    getf();
    int t;
    while (~scanf("%d",&t)){
        while (t--){
            int a,b,c,d;
            scanf("%d %d %d %d",&a,&b,&c,&d);
            int st = a*4+b;
            int ed = c*4+d;
            if (ed < st) swap(st,ed);
            ed++;
            printf("%lld\n",(prefix[ed]-prefix[st]+mod)%mod); 
        }
    }
    return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值