XTU SBB的饭碗

来源:互联网 发布:淘宝店 编辑:程序博客网 时间:2024/04/29 23:54

题目描述
SBB的妈妈SAA和SBB的爸爸SCC对他要求特别严格,每次吃饭之前都要SBB做出一道数学题目,不然就不允许吃饭。现在SCC的题目来了假设碗里有n粒饭,SBB每次最多可以从碗里取出m粒吃,最少取出1粒,问SBB有多少种吃法可以把碗里的饭吃完,由于结果可能会很大,所以要把最终的答案对P取模。SBB对这道题毫无头绪,于是他发了一条短信给你这个好朋友,求你帮助他。

输入
第一行为样例的数目T(T <= 100)。
每个样例由三个数n(1 <= n <= 10^9),m(1 <= m <= 10)和P(1 <= P <= 10^6)组成。
输出
对于每个样例输出一行,结果为SBB吃饭的方法数目对P取模。

样例输入
3
4 1 3
3 2 3
4 2 6
样例输出
1
0
5
 

 

Source

XTU OnlineJudge

 

这道题想了很久,哎!最近终于做出来了!!觉得解脱了!呵呵...

这道题如果只是模拟计算过程的话,不用说会超时(1<=n<=10^9)。但用矩阵运算和二分法去实现,竟44ms就AC了!!

首先,已知n,m,p,刚吃饭的吃法总共有

f(n)=f(n-1)+f(n-2)+...+f(n-m) (m-m>=0);

当m=1时,为常数数列{1}。

当m=2j时,f(n)=f(n-1)+f(n-2),为斐波拉契数列;

用二分法进行矩阵幂运算。

 当 m=3时,构造矩阵.............

完了。

 

 

 

原创粉丝点击