Quad Tiling

poj 3420

题目大意

在一个4×n的棋盘上,用1×2的多米诺骨牌把他填满,问有多少种方法

输入样例

1 10000
3 10000
5 10000
0 0

输出样例

1
11
95

数据范围

1⩽N⩽1091 \leqslant N \leqslant 10^91⩽N⩽109
0<M⩽1050 < M \leqslant 10^50<M⩽105

解题思路

对于放多米诺骨牌可以用状压DP
但直接状压会TLE
考虑矩阵乘法
可以先把状态之间的关系预处理出来
然后快速幂即可

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define wyc mod
using namespace std;
ll n, mod;
struct matrix
{ll n, m, a[20][20];matrix operator *(const matrix &b) const{matrix c;c.n = n;c.m = b.m;for (int i = 1; i <= c.n; ++i)for (int j = 1; j <= c.m; ++j)c.a[i][j] = 0;for (int i = 1; i <= c.n; ++i)for (int k = 1; k <= m; ++k)for (int j = 1; j <= c.m; ++j)c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j] % wyc) % wyc;return c;}
}A, B;
ll ggg(ll x, ll y, ll z, ll g)
{return x + (y<<1) + (z<<2) + (g<<3) + 1;
}
void pp(ll x, ll y, ll z, ll g)
{ll xx = x^1, yy = y^1, zz = z^1, gg = g^1;B.a[ggg(xx, yy, zz, gg)][ggg(x, y, z, g)] = 1;if (!xx && !yy){B.a[ggg(1, 1, zz, gg)][ggg(x, y, z, g)] = 1;if (!zz && !gg)B.a[ggg(1, 1, 1, 1)][ggg(x, y, z, g)] = 1;}if (!yy && !zz)B.a[ggg(xx, 1, 1, gg)][ggg(x, y, z, g)] = 1;if (!zz && !gg)B.a[ggg(xx, yy, 1, 1)][ggg(x, y, z, g)] = 1;return;
}
void Counting(ll x)
{while(x){if (x&1) A = A * B;B = B * B;x>>=1; }return;
}
int main()
{while(1){scanf("%lld%lld", &n, &mod);if (!n) break;for (int i = 1; i <= 16; ++i){A.a[1][i] = 0;for (int j = 1; j <= 16; ++j)B.a[i][j] = 0;}A.n = 1;A.m = B.n = B.m = 16;A.a[1][1] = 1;//初始状态A.a[1][4] = 1;A.a[1][7] = 1;A.a[1][13] = 1;A.a[1][16] = 1;for (int i = 0; i <= 1; ++i)for (int j = 0; j <= 1; ++j)for (int k = 0; k <= 1; ++k)for (int c = 0; c <= 1; ++c)pp(i, j, k, c);//预处理矩阵Counting(n - 1);//快速幂printf("%lld\n", A.a[1][16] % wyc);}return 0;
}

【矩阵乘法】Quad Tiling(poj 3420)相关推荐

  1. 线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路

    状压与矩阵加速的藕断丝连 Quad Tiling description solution code [Hnoi2010]Bus 公交线路 description solution code Quad ...

  2. POJ3420 Quad Tiling【矩阵快速幂】

    Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5008 Accepted: 2269 Descripti ...

  3. 【矩阵乘法】Matrix Power Series(poj 3233)

    Matrix Power Series poj 3233 题目大意 给你一个矩阵A,让你求S=A+A2+A3+-+AkS = A + A^2 + A^3 + - + A^kS=A+A2+A3+-+Ak ...

  4. POJ3420 Quad Tiling(模板+矩阵快速幂)

    Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4107 Accepted: 1878 Descripti ...

  5. poj 3233 矩阵乘法(分块矩阵)

    POJ 3233 题解:Sn为所求矩阵, 则 这样, 此题就变成了求矩阵幂和矩阵乘法, 分块矩阵乘法和普通矩阵一样的. code: /* adrui's submission Language : C ...

  6. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

  7. HDU 2865 Birthday Toy [Polya 矩阵乘法]

    传送门 题意: 相邻珠子不能相同,旋转等价.$n$个珠子$k$中颜色,求方案数 首先中间珠子$k$种选择,$k--$ 如果没有相邻不同的限制,就和$POJ\ 2154$一样了 $|C(f)|=k^{\ ...

  8. 2.6 矩阵乘法重要特例

    重要特例 AmnA_{mn}Amn​ , BnpB_{np}Bnp​ 两个矩阵相乘,当 m,n,pm,n,pm,n,p 有的为 111 时,是极其重要的特例,具有重要意义. 定义 列向量 列数为 11 ...

  9. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

最新文章

  1. VMware Workstation 与 Device/Credential Guard 不兼容
  2. 记与公司内网微博的谈话
  3. 原生javascript 元素依次掉落及上升
  4. android pay 绑定失败,实战Apple Pay失败!Android Pay你期待吗?
  5. 路由器05---多拨
  6. UVA11398 The Base-1 Number System【进制】
  7. 大容量nc文件解析_分布式文件系统浅谈
  8. bootstrap 和 jqueryui
  9. wps实现项目编号转成文本形式
  10. RK px30 配置ap6212 wifi bt流程记录
  11. 2019.11.21工作记录——windriver生成PCI驱动32位向64位移植
  12. 三级流域空间分布图_水资源空间分布模型及GIS分析应用.pdf
  13. 【半佛仙人】他从不买水军,凭什么一年内做到B站500万粉丝?
  14. 怎么给word文档注音_Word文档中,怎样全篇加注拼音?
  15. 基于Java实现的商品推荐系统
  16. win10删除文件提示源文件路经太长无法删除解决办法
  17. 工作流Activiti集成构建自有平台方案
  18. Linux主机下连接远程postgresql数据库、容器版postgresql数据库
  19. BUG的定义、分类、要素、生命周期
  20. Java API 访问HA模式下的HDFS集群

热门文章

  1. 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘
  2. Linux vi 双屏显示,manjaro AwesomeWM 上使用双显示器
  3. readyread信号不触发_触发器型PFD与传统型PFD性能仿真对比
  4. 字符串匹配经典题目——KMP算法(Leetcode题解-Python语言)
  5. 辅助类BinaryTreeNodeIndex(用index索引代替指针)
  6. 网络编程-TCP/IP协议栈-IP协议
  7. mysql 多行拼接注入_MySQL注入汇总
  8. cli2弃用了吗 vue_vue cli - 2 升级到 3的问题汇总
  9. python os模块详细_python之os模块详解
  10. Codeforces Round #703 (Div. 2) B.Eastern Exhibition 中位数结论