题目链接:http://codeforces.com/contest/450/problem/B
解题报告:f1 = x,f2 = y,另外有当(i >= 2) fi = fi+1 + fi-1,现在给出x和y,k,让你输出fn % (1e9+7)
对于这题我真想说细节决定一切,f的值一共只有6个,只要把f的值全部打表打出来了就可以直接得出任何一个fk的值。
但是注意x和y的范围都是小于10^9,所以当(x+y) % MOD的时候就会可能出现还是负数的情况,所以说交题之前最好测下极端的情况,因为错误往往是在这些地方犯的。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 typedef long long INT; 7 INT ans[10]; 8 const INT MOD = 1000000007; 9 void dabiao(INT x,INT y) 10 { 11 x = (x + MOD) % MOD; //先单个分别对x,y处理就不会出现取模之后还是负数的情况 12 y = (y + MOD) % MOD; 13 ans[0] = x; 14 ans[1] = y; 15 ans[2] = (y - x + MOD) % MOD; 16 ans[3] = (-1 * x + MOD) % MOD; 17 ans[4] = (-1 * y + MOD) % MOD; 18 ans[5] = (x - y + MOD) % MOD; 19 } 20 int main() 21 { 22 INT x,y,n; 23 while(scanf("%lld%lld%lld",&x,&y,&n)!=EOF) 24 { 25 dabiao(x,y); 26 printf("%lld ",ans[(n - 1) % 6]); 27 } 28 return 0; 29 }