HDU 5495 Jesus Is Here

脑力题,怪我脑子不好使,没做出来,参考的别人博客:

链接:https://blog.csdn.net/chenzhenyu123456/article/details/48579695

其实就是前后两项的距离关系,想通了还挺简单的,佩服大佬们比赛那么短时间想出来orz

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

struct node{
    ll len;
    ll num;
    ll sum;
    ll ans;
}p[201320];

const ll mod=530600414;

void solve(){
    p[3].ans=0;p[3].len=3;p[3].num=1;p[3].sum=1;
    p[4].ans=0;p[4].len=5;p[4].num=1;p[4].sum=3;
    for(int i=5;i<201320;i++){
        p[i].len=(p[i-2].len+p[i-1].len)%mod;
        p[i].num=(p[i-2].num+p[i-1].num)%mod;
        p[i].sum=(p[i-2].sum+p[i-1].sum+(p[i-2].len*p[i-1].num)%mod)%mod;
        p[i].ans=((p[i-2].ans+p[i-1].ans)%mod+(((p[i-2].len*p[i-2].num-p[i-2].sum)%mod)*p[i-1].num)%mod+(p[i-1].sum*p[i-2].num)%mod)%mod;
    }
}

int main()
{
    solve();
    int t;
    int cs=1;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        printf("Case #%d: %lld\n",cs++,p[n].ans);
    }
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40679299/article/details/81665074