Codeforces|Codeforces 450B Jzzhu and Sequences(递推找规律)

【Codeforces|Codeforces 450B Jzzhu and Sequences(递推找规律)】题目链接 http://codeforces.com/problemset/problem/450/B
如果按照题目的递推公式写下去,数据必定会非常大,不现实。
根据以前的经验,我觉得这样的题目肯定是有规律的,可能写到多少项以后就会出现循环
试着写了十几项,发现他是6个一循环
需要注意的是数据范围,因为最后输出结果是mod1000000007,所以需要对负数进行处理
负数取模的方法是加上模的是以后将数据控制在0-mod之间,在取模;
我自己开始写的代码注意到了负数取模的问题,但没有注意到数据范围,结果WA好多次
还有把数组1-6定义,然后分情况讨论,开始分类情况有问题,输入为6的倍数的时候根据判断条件输出的是a[0],也WA几次


#include #include using namespace std; #define mod 1000000007 long long a[10]; long long n; int main() { long long x,y; while(scanf("%lld%lld",&x,&y)!=EOF) { long long n; scanf("%lld",&n); a[0]=x; a[1]=y; a[2]=y-x; a[3]=-x; a[4]=-y; a[5]=x-y; n--; if(a[n%6]>=0) printf("%lld\n",a[n%6]%mod); else printf("%lld\n",(a[n%6]+2*mod)%mod); } return 0; }/* 956749456 906548654 4654 *//* 100000000 -100000000 3 */

另外一种解法,是用矩阵快速幂,这里就不再赘述。

    推荐阅读