POJ 3420 Quad Tiling
2015-05-04 15:36
337 查看
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int mod; int n; struct node{ int s[6][6]; }aa; void init(){ memset(aa.s,0,sizeof(aa.s)); aa.s[0][0]=aa.s[1][0]=aa.s[2][0]=aa.s[3][0]=1; aa.s[0][1]=1; aa.s[0][2]=aa.s[4][2]=1; aa.s[0][3]=2; aa.s[3][3]=1; aa.s[2][4]=1; } node mupi(node a,node b){ node c; memset(c.s,0,sizeof(c.s)); for(int k=0;k<5;k++){ for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ c.s[i][j]+=(a.s[i][k]%mod*b.s[k][j]%mod)%mod; } } } return c; } void slove(){ init(); node d; memset(d.s,0,sizeof(d.s)); for(int i=0;i<5;i++){ d.s[i][i]=1; } /* puts("d"); for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d ",d.s[i][j]); } puts(""); } puts("aa:"); for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d ",aa.s[i][j]); } puts(""); }*/ while(n){ if(n&1) d=mupi(aa,d); aa=mupi(aa,aa); n/=2; } /* for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d ",d.s[i][j]); } puts(""); } */ int ans=0; printf("%d\n",d.s[0][0]%mod); } int main(){ while(scanf("%d%d",&n,&mod)&&n+mod){ slove(); } }
相关文章推荐
- POJ 3420 Quad Tiling 状压DP+矩阵快速幂
- Poj-3420 Quad Tiling
- POJ_3420_Quad Tiling_搜索,矩阵快速幂,状态压缩,动态规划
- POJ 3420 Quad Tiling
- POJ 3420 Quad Tiling
- POJ3420-Quad Tiling
- Quad Tiling [POJ 3420]
- poj 3420 Quad Tiling
- POJ 3420 Quad Tiling (瓷砖问题+矩阵快速幂)
- POJ 3420 Quad Tiling
- [POJ 3420] Quad Tiling
- POJ 3420 Quad Tiling(状压DP 用矩阵快速幂优化)
- POJ 3420 Quad Tiling (矩阵乘法)
- poj 3420 Quad Tiling
- POJ 3420 Quad Tiling(轮廓线DP+矩阵快速幂)
- POJ 3420 Quad Tiling
- 【POJ 3420】Quad Tiling(dp|递推 +矩阵快速幂)
- POJ-3420 Quad Tiling 状态压缩+矩阵乘法
- Quad Tiling POJ - 3420 (矩阵快速幂)题解
- POJ 3420 Quad Tiling 线性递推 矩阵快速幂