数学问题。
看到题目第一反应是菲波那切数列,然而看到2*10^9的数据范围。。吓得不敢讲话。。
直到我好好读了一遍题目。
f[i]=f[i-1]+f[i+1] 移项,得到 f[i+1]=f[i]-f[i-1]
就是 f[i]=f[i-1]-f[i-2]
然后把前面几个列出来:
f1;
f2;
f3=f2-f1;
f4=f3-f2=-f1;
f5=f4-f3=-f2;
f6=f5-f4=f1-f2;
f7=f6-f5=f1;
f8=f7-f6=f2;
到此为止,已经发现重复的了。。于是这一道题目瞬间转化成一道硕大无朋的水题。。
#include<iostream>
using namespace std;
const long int mod=1000000007;
int n,x,y,f[7];
void read()
{
int i,j;
cin>>x>>y>>n;
f[1]=x; f[2]=y; f[3]=f[2]-f[1];
f[4]=f[3]-f[2];
f[5]=f[4]-f[3];
f[6]=f[5]-f[4];//构造数列
n=(n-1)%6+1;
while(f[n]<0)
f[n]+=mod;//然而C++似乎没有对负数取模的能力。。
cout<<(f[n]%mod)<<endl;
return;
}
int main()
{
read();
return 0;
}