CodeForces 185A. Plant (矩阵快速幂)
2017-05-18 21:25
309 查看
CodeForces 185A. Plant (矩阵快速幂)
题意分析
求解N年后,向上的三角形和向下的三角形的个数分别是多少。如图所示:N=0时只有一个向上的三角形,N=1时有3个向上的三角形,1个向下的三角形,N=2,有10个向上的三角形和6个向下的三角形。
根据递推关系,设an为第N年向上的三角形个数,bn为第N年向下的三角形个数、初始条件为 a0 = 1, b0 = 0;
递推关系式:
an = 3an-1 + bn-1
bn = 3bn-1 + an-1
可以构造出一下矩阵
然后用矩阵快速幂即可。
代码总览
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <sstream> #include <set> #include <map> #include <queue> #include <stack> #include <cmath> #define INF 0x3f3f3f3f #define nmax 200 #define MEM(x) memset(x,0,sizeof(x)) using namespace std; const int Dmax = 11; int N = 2; long long MOD; typedef struct{ long long matrix[Dmax][Dmax]; void init() { memset(matrix,0,sizeof(matrix)); for(int i = 0; i<Dmax;++i) matrix[i][i] = 1; } }MAT; MAT ADD(MAT a, MAT b) { for(int i = 0; i<N;++i){ for(int j = 0;j<N;++j){ a.matrix[i][j] +=b.matrix[i][j]; a.matrix[i][j] %= MOD; } } return a; } MAT MUL(MAT a, MAT b) { MAT ans; for(int i = 0; i<N;++i){ for(int j = 0; j<N;++j){ ans.matrix[i][j] = 0; for(int k = 0; k<N;++k){ ans.matrix[i][j] += ( (a.matrix[i][k]) * (b.matrix[k][j]) ) % MOD; } ans.matrix[i][j] %= MOD; } } return ans; } MAT POW(MAT a, long long t) { MAT ans; ans.init(); while(t){ if(t&1) ans = MUL(ans,a); t>>=1; a = MUL(a,a); } return ans; } void OUT(MAT a) { for(int i = 0; i<N;++i){ for(int j = 0; j<N;++j){ printf("%5I64d",a.matrix[i][j]); } printf("\n"); } } void IN(MAT & a,MAT & ini) { memset(a.matrix,0,sizeof(a.matrix)); memset(ini.matrix,0,sizeof(ini.matrix)); ini.matrix[0][0] = 1; ini.matrix[1][0] = 0; a.matrix[0][0] = a.matrix[1][1] = 3; a.matrix[0][1] = a.matrix[1][0] = 1; } void CAL(MAT a) { printf("%I64d\n",a.matrix[0][0] % MOD); } int main() { //freopen("in.txt","r",stdin); long long n;MOD = 1000000007; while(scanf("%I64d",&n) != EOF){ MAT temp,ini; IN(temp,ini); temp = POW(temp,n); temp = MUL(temp,ini); CAL(temp); } return 0; }
相关文章推荐
- CodeForces 185A. Plant(矩阵快速幂) 构造
- CodeForces 185A. Plant(矩阵快速幂)
- CodeForces-185A(矩阵快速幂)
- Codeforces 450B Jzzhu and Sequences(矩阵快速幂)
- Codeforces 514E 矩阵快速幂
- codeforces 691E Xor-sequences(矩阵快速幂)
- CodeForces 392 C.Yet Another Number Sequence(矩阵快速幂)
- CodeForces - 185A Plant 矩阵快速幂
- CodeForces-691E Xor-sequences(矩阵快速幂)
- Codeforces 514E Darth Vader and Tree DP + 矩阵快速幂
- Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]
- Codeforces 691E Xor-sequences【矩阵快速幂,好题】
- codeforces 185a(矩阵快速幂)
- CodeForces 719E Sasha and Array 【线段树】【快速矩阵幂】
- codeforces 450-B Jzzhu and Sequences 矩阵快速幂
- Jzzhu and Sequences CodeForces - 450B (矩阵快速幂)
- Codeforces 450B f【n】=f【n-1】-f【n-2】(矩阵快速幂,裸题)
- CodeForces 678D Iterated Linear Function 矩阵快速幂
- Codeforces 551D GukiZ and Binary Operations(矩阵快速幂)
- CodeForces 450B (矩阵快速幂模板题+负数取模)