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

题目链接 http://codeforces.com/problemset/problem/450/B

如果按照题目的递推公式写下去,数据必定会非常大,不现实。

根据以前的经验,我觉得这样的题目肯定是有规律的,可能写到多少项以后就会出现循环

试着写了十几项,发现他是6个一循环

需要注意的是数据范围,因为最后输出结果是mod1000000007,所以需要对负数进行处理

负数取模的方法是加上模的是以后将数据控制在0-mod之间,在取模;
我自己开始写的代码注意到了负数取模的问题,但没有注意到数据范围,结果WA好多次
还有把数组1-6定义,然后分情况讨论,开始分类情况有问题,输入为6的倍数的时候根据判断条件输出的是a[0],也WA几次

#include<iostream>
#include<cstdio>
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
*/
另外一种解法,是用矩阵快速幂,这里就不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值