HDU1005找规律

大佬都说找规律的题目简单,而我这道题做了很久很久…
一开始我是模拟,用到了快速幂和同余定理
然后MLE,。。。。。瞬间脸黑,想想确实是的,自己实验了一下发现确实跑了很久很久。。。。
让我们一起来看一下这个原题吧!
HDU1005找规律_第1张图片

题目大意:
给你一个函数,然后计算函数值。是不是很憨,是不是很憨?
想用递归是吧?不行呢。MLE了,我好难
那怎么做呢?
于是我就参看了别人的代码发现大佬是这样做的:
根据数学知识我们不难发现,对7求余就会出现重复的情况,同余定理,(af(n-1)+bf(n-2))%7==(a%7f(n-1)+b%7f(n-2))%7;
对于a,b来说,就有7*7=49种情况,也就是49是一个周期,嘤嘤嘤,然后打个表;

代码:

/*
有两种解法:
第一种:矩阵快速幂+二分;
第二种:观察得到规律,是一个周期函数,打表得到答案;

*/
#include
#include
#include
using namespace std;
int main()
{
	int f[50], a, b, n;
	f[0] = 1, f[1] = 1;
	while (scanf_s("%d%d%d", &a, &b, &n)&&a &&b &&n)
	{
		for (int i = 2; i < 49; i++)
			f[i] = (a * f[i - 1] + b * f[i - 2])%7;
		printf("%d\n", f[(n-1)%49]);
	}
	return 0;
}

至于第一种模拟的解法我还没吃透不敢写555;
大佬可以给我留言教我。
数学杀我我爱数学。

你可能感兴趣的:(ACM,HDU,1005)