题意:
第一头牛和第二头牛的号码为 1 和 2,其余的牛的号码需要通过公式求得:
f(n) = f(n - 1) + 2 * f(n - 2) + n * n * n , (f(1) = 1,f(2) = 2,分别是第一头和第二头)。
题解:
与前几项有关的加法公式一般都是用矩阵快速幂来解的。。。所以解法就是矩阵快速幂。
很明显,右矩阵肯定与 f(n - 1)、f(n - 2) 和 n * n * n。
问题来了,怎么把 n * n * n 转移为 (n + 1) * (n + 1) * (n + 1)?直接算。。。可以得到 :
n * n * n + 3 * n * n - 3 * n + 1 = (n + 1) * (n + 1) * (n + 1),所以我们还要有 n * n 、 n 和 1,同理可以得到:
n * n + 2 * n + 1 = (n + 1) * (n + 1)。
所以右矩阵就这么可以得出来了:
左矩阵根据关系可以得:
推出来就可以直接对左矩阵快速幂,直接输出。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include