Jzzhu has invented a kind of sequences, they meet the following property:
You are given x and y, please calculate fn modulo 1000000007(109 + 7).
Input
The first line contains two integers x and y(|x|, |y| ≤ 109). The second line contains a single integer n(1 ≤ n ≤ 2·109).
Output
Output a single integer representing fn modulo 1000000007(109 + 7).
Sample Input
Input
2 3 3
Output
1
Input
0 -1 2
Output
1000000006
Hint
In the first sample, f2 = f1 + f3, 3 = 2 + f3, f3 = 1.
In the second sample, f2 = - 1; - 1 modulo (109 + 7) equals (109 + 6).
大数据,看有木有规律可循
丧心病狂的一题。。。。比赛的时候怎么都没弄出来。
数据范围较大,不可能直接数组模拟,或者直接遍历一遍。但是在快结束比赛的时候,我找到了规律,就是6个一循环(我同xue说不停的用同种符号,累次的进行运算有6
个一循环的归路)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#define mod 1000000007
#define LL long long
using namespace std;
LL s,sum,z;
LL ans;
LL a[1000];
int main()
{
LL x,y,i,j,k,n,m;
while(scanf("%lld%lld",&x,&y)!=EOF)
{
scanf("%lld",&n);
a[0]=x;a[1]=y;
for(i=2;i<7;i++)
a[i]=a[i-1]-a[i-2];
if(a[ (n-1)%6 ]>=0)
printf("%lld\n",a[ (n-1)%6 ]%mod);
else
printf("%lld\n",(a[ (n-1)%6 ]+2*mod)%mod);//没注意数据范围是|x|<=10^9可能在两数相减>10^9,所以在值为负数的情况下,先加2*mod再取模
}
return 0;
}