CF 450B Jzzhu and Sequences

数学问题。

看到题目第一反应是菲波那切数列,然而看到2*10^9的数据范围。。吓得不敢讲话。。

直到我好好读了一遍题目。

f[i]=f[i-1]+f[i+1]  移项,得到 f[i+1]=f[i]-f[i-1]

就是 f[i]=f[i-1]-f[i-2]

然后把前面几个列出来:

f1;

f2;

f3=f2-f1;

f4=f3-f2=-f1;

f5=f4-f3=-f2;

f6=f5-f4=f1-f2;

f7=f6-f5=f1;

f8=f7-f6=f2;

到此为止,已经发现重复的了。。于是这一道题目瞬间转化成一道硕大无朋的水题。。


#include<iostream>
using namespace std;

const long int mod=1000000007;

int n,x,y,f[7];

void read()
{
	int i,j;
	
	cin>>x>>y>>n;
	
	f[1]=x; f[2]=y; f[3]=f[2]-f[1];
	f[4]=f[3]-f[2];
	f[5]=f[4]-f[3];
	f[6]=f[5]-f[4];//构造数列
	
	n=(n-1)%6+1;
	
	while(f[n]<0)
		f[n]+=mod;//然而C++似乎没有对负数取模的能力。。
	
	cout<<(f[n]%mod)<<endl; 
	
	return;
}

int main()
{
	read();
	return 0;
}


AC代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值