1. 程式人生 > >題解 CF450B 【Jzzhu and Sequences】

題解 CF450B 【Jzzhu and Sequences】

作為首A的人(?)我來發佈下這道大水題的題解了~

首先題目給出了f[i]=f[i-1]+f[i+1],我們移下項: f[i+1]=f[i]-f[i-1],所以我們可以知道:第i項等於它前兩項之差!

即: f[i]=f[i-1]-f[i-2],同時,f[i-1]=f[i-2]-f[i-3],代入得: f[i]=-f[i-3]=f[i-6],所以我們只需將前6項算出,第n%6項就是答案了,

不過值得注意的是,如果n%6==0,我們需要把他變成6,當然,也可以把第6項的值賦給第0項 至於取模,就不多說了。。。

程式碼如下:

#include<iostream>

using namespace std;

const long long mod=1e9+7;

long long f[7];//開long long 防爆

int main(){ long long n,lo;

cin>>f[1]>>f[2]>>n; f[3]=f[2]-f[1];

f[4]=-f[1]; f[5]=-f[2]; f[6]=-f[3];

n%=6;

if(n==0){//如果等於0,把它變成6或者令f[0]=f[6]

 n=6; }

f[n]=(f[n]%mod+mod)%mod;//取模

cout<<f[n];

return 0;

}

當然,童鞋們也可以試試模3,不過記得討論正負哦!