hihoCoder 1143 矩阵快速幂
2016-10-12 12:24
363 查看
传送门: HihoCoder 1143
题解
递推:f
= f[n - 1] + f[n - 2];
过程: 放2* n个骨牌时(n >= 3)最后一列竖直放方案数为f[n - 2]最后两列放两个横放, 为f[n - 2]得证
构造:
(1110) * (f[n−1]f[n−2]) = (f[n]f[n−1])
(1110) ^ (n - 2) * (f[2]f[1]) = (f[n]f[n−1])(n >= 3)
注意一点, 矩阵乘法模数为19991997, 所以int可能会溢出, 应该用long long
code:
/* adrui's submission Language : C++ Result : Accepted Love : ll Favorite : Dragon Balls Standing in the Hall of Fame */ #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; #define debug 0 #define LL long long #define mod 19999997 #define M(a, b) memset(a, b, sizeof(a)) int n; struct Matrix { LL mat[2][2]; void init() { M(mat, 0); for (int i = 0; i < 2; i++) mat[i][i] = 1; } void Debug() { for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) printf("%I64d%s", this->mat[i][j], j == 1 ? "\n" : " "); } }; Matrix operator * (Matrix a, Matrix t) { //矩阵乘法 Matrix c; M(c.mat, 0); for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * t.mat[k][j]) % mod; } return c; } Matrix operator ^ (Matrix tmp, int b) { //快速幂 Matrix res; res.init(); while (b) { if (b & 1) res = res * tmp; tmp = tmp * tmp; b >>= 1; } return res; } int main() { #if debug freopen("in.txt", "r", stdin); #endif //debug while (~scanf("%d", &n)) { if (n < 3) printf("%d\n", n); else { Matrix tmp; M(tmp.mat, 0); //构造底数矩阵 tmp.mat[0][0] = tmp.mat[0][1] = 1; tmp.mat[1][0] = 1; //tmp.Debug(); Matrix res = tmp ^ (n - 2); //快速幂 //res.Debug(); int ans = (2 * res.mat[0][0] + res.mat[0][1]) % mod; printf("%d\n", ans); } } return 0; }
相关文章推荐
- HihoCoder1143 骨牌覆盖问题·一(矩阵快速幂,斐波那契)
- hihocoder1143 骨牌覆盖问题·一(矩阵快速幂)
- hihoCoder1143 DP 斐波那契数列矩阵快速幂
- hihoCoder 1143 : 骨牌覆盖问题·一 矩阵快速幂
- hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)
- HihoCoder 1151 矩阵快速幂 + 取模
- hihocoder 1504 : 骑士游历 矩阵快速幂
- hihocoder 1555 四次方根(矩阵快速幂)
- hihocoder第41周 骨牌覆盖(矩阵快速幂)
- hdu 1143 递推 + 矩阵快速幂做法
- [HIHO1143]骨牌覆盖问题·一(矩阵快速幂,递推)
- hihoCoder 1151 : 骨牌覆盖问题·二 矩阵快速幂
- hiho 1143 矩阵快速幂 求递推式
- [Offer收割]编程练习赛13 hihocoder 1504 (矩阵快速幂)
- HDOJ 4549 M斐波那契数列 矩阵快速幂+欧拉降幂公式
- poj 3744 Scout YYF I(矩阵快速幂+概率dp)
- zhx's contest (矩阵快速幂 + 数学推论)
- 51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
- Training little cats(poj3735,矩阵快速幂)
- 矩阵快速幂AC代码HDU 2035