CF 450B Jzzhu and Sequences

题目大意:

        现只有一个测例,让你求一个序列f中fn的值,其中f1 = x, f2 = y, fi = fi-1 + fi+1(i > 1),其中fn的n的范围为[1, 2×10^9],并且|x|、|y| ≤ 10^9。

题目链接

注释代码:

/*                                                
 * Problem ID : CF 450B Jzzhu and Sequences 
 * Author     : Lirx.t.Una                                                
 * Language   : GNU C                               
 * Run Time   : 30 ms                                                
 * Run Memory : 0 KB                                                
*/

#include <stdio.h>

#define	MOD		1000000007

typedef	__int64		llg;

//可以发现该序列是一个循环序列
//循环节为x、y、y - x、-x、-y、x - y
//最早的循环节下标为1、2、3、4、5、6

int
main() {
	
	int		n;
	int		x, y;
	int		ans;

	scanf("%d%d%d", &x, &y, &n);
	switch ( n % 6 ) {
	
		case 0 : ans = x - y; break;
		case 1 : ans = x; break;
		case 2 : ans = y; break;
		case 3 : ans = y - x; break;
		case 4 : ans = -x; break;
		case 5 : ans = -y; break;

		default : break;
	}

	//由于负数的余数是先通过MOD将其加成整数后才取余的
	//x和y最小可以取到-10^9,因此至少应该加两次MOD保证ans一定是正的
	ans = ( (llg)ans + MOD + MOD ) % MOD;

	printf("%d\n", ans);

	return 0;
}
无注释代码:

#include <stdio.h>

#define	MOD		1000000007

typedef	__int64		llg;

int
main() {
	
	int		n;
	int		x, y;
	int		ans;

	scanf("%d%d%d", &x, &y, &n);
	switch ( n % 6 ) {
	
		case 0 : ans = x - y; break;
		case 1 : ans = x; break;
		case 2 : ans = y; break;
		case 3 : ans = y - x; break;
		case 4 : ans = -x; break;
		case 5 : ans = -y; break;

		default : break;
	}
	ans = ( (llg)ans + MOD + MOD ) % MOD;

	printf("%d\n", ans);

	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值