题目链接:http://codeforces.com/problemset/problem/450/B
题目意思:给出 f1 和 f2 的值,以及n,根据公式:fi = fi-1 + fi+1,求出fn是多少。
这题通过手工模拟,可以发现它有一个周期的:以6为周期!
f1 = f1, f2 = f2, f3 = f2 - f1
f4 = -f1, f5 = -f2, f6 = -f2 + f1
以前从来不知道负数的模怎么求,这题刚好考到!其实根据第二个test约莫猜到,就是要加上要mod的那个数,即1e9+7,可恨的是,一开始 mod多少没有搞清楚(写成n mod 7了),mod 7 = 0,即f[7]其实是等于f[1]的;然后改了之后又把while写成if(这个while结束的条件是被除数 > 0为止)被人hack了,还全然不知呢,最后查不出来......唉,经验还是很不够啊,继续努力!!!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 7 typedef long long ll; 8 ll f[6+5]; 9 ll x, y, n; 10 11 int main() 12 { 13 while (scanf("%lld%lld%lld", &x, &y, &n) != EOF) 14 { 15 ll MOD = 1e9+7; 16 f[1] = x; 17 f[2] = y; 18 f[3] = y - x; 19 f[4] = -x; 20 f[5] = -y; 21 f[6] = x - y; 22 n %= 6; 23 if (n == 0) // 因为没有f[0]的定义!f[k*6] 是等于 f[6]的! 24 { 25 while (f[6] < 0) 26 f[6] += MOD; 27 printf("%lld ", f[6]%MOD); 28 } 29 else 30 { 31 while (f[n] < 0) 32 f[n] += MOD; 33 printf("%lld ", f[n]%MOD); 34 } 35 } 36 return 0; 37 }