hihoCoder 1143 : 骨牌覆盖问题·一 矩阵快速幂
2015-05-12 17:36
501 查看
1143 : 骨牌覆盖问题·一
时间限制:10000ms单点时限:1000ms
内存限制:256MB
描述
骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢?
举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:
提示:骨牌覆盖
提示:如何快速计算结果
输入
第1行:1个整数N。表示棋盘长度。1≤N≤100,000,000
输出
第1行:1个整数,表示覆盖方案数 MOD 19999997样例输入
62247088
样例输出
17748018
//1143 : 骨牌覆盖问题·一 /*简单解法 超时 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define N 100000005 int dp ; int main() { int n,i,j; dp[1]=1; dp[2]=2; for(i=3;i<N;i++) dp[i]=(dp[i-1]+dp[i-2])%19999997; while(scanf("%d",&n)!=EOF) { printf("%d\n",dp ); } return 0; } */ //(a, b) x M = (b, a+b) //必须用 long long #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define M 19999997 struct matrix{ long long map[2][2]; }; matrix mat,ans; void init() { int i,j,k; mat.map[0][0]=0; mat.map[0][1]=1; mat.map[1][0]=1; mat.map[1][1]=1; for(i=0;i<2;i++) for(j=0;j<2;j++) ans.map[i][j]=(i==j); } matrix mul(matrix a,matrix b) { int i,j,k; matrix c; for(i=0;i<2;i++) for(j=0;j<2;j++) { c.map[i][j]=0; for(k=0;k<2;k++) { c.map[i][j]+=(a.map[i][k]*b.map[k][j])%M; c.map[i][j]%=M; } } return c; } void pow(int n) { for(;n;n>>=1) { if(n&1) ans=mul(ans,mat); mat=mul(mat,mat); } } int main() { int n; while(scanf("%d",&n)!=EOF) { init(); pow(n); //linux: printf("%lld",a); //windows: printf("%I64d",a); //cout<<ans.map[1][1]<<endl; 对 //printf("%I64d\n",ans.map[1][1]); 错 printf("%lld\n",ans.map[1][1]);//对 } return 0; }
相关文章推荐
- hiho一下·41 骨牌覆盖问题·一(矩阵快速幂·费波拉契)
- hihocoder1143 骨牌覆盖问题·一(矩阵快速幂)
- hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)
- hihoCoder 1151 : 骨牌覆盖问题·二 矩阵快速幂
- 2015编程之美 骨牌覆盖问题·一(矩阵快速幂)
- HihoCoder1143 骨牌覆盖问题·一(矩阵快速幂,斐波那契)
- hihoCoder#1143 : 骨牌覆盖问题·一
- [HIHO1143]骨牌覆盖问题·一(矩阵快速幂,递推)
- 题目1 : 骨牌覆盖问题·二 (矩阵快速幂+分析状态的表示+题目的提示分析很好很经典)
- hihoCoder #1143 : 骨牌覆盖问题·一
- 题目1 : 骨牌覆盖问题·一 (线性递推+矩阵快速幂)
- 【hiho一下 第四十一周】骨牌覆盖问题·一
- hiho一(第四十一周)------骨牌覆盖问题·一
- hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)
- 2015编程之美 骨牌覆盖问题·二 (快速幂)
- hihoCoder #1143 : 骨牌覆盖问题·一(矩阵乘法)
- hihocoder第41周 骨牌覆盖(矩阵快速幂)
- hihoCoder #1162 : 骨牌覆盖问题·三 (矩阵快速幂,DP)
- 快速矩阵幂 hihoCoder1162 骨牌覆盖问题·三
- 算法-骨牌覆盖问题(矩阵快速幂求Fibonacii)