博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3420 Quad Tiling
阅读量:6068 次
发布时间:2019-06-20

本文共 1435 字,大约阅读时间需要 4 分钟。

矩阵快速幂。先要处理出第i列每个状态下,让该状态填满,下一列可以出现的状态。因为N较大,可以矩阵加速。

#pragma comment(linker, "/STACK:1024000000,1024000000")#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const double pi=acos(-1.0),eps=1e-8;void File(){ freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout);}inline int read(){ char c = getchar(); while(!isdigit(c)) c = getchar(); int x = 0; while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } return x;}LL n,MOD;struct Matrix{ long long A[18][18]; int R, C; Matrix operator*(Matrix b);};Matrix X, Y, Z;Matrix Matrix::operator*(Matrix b){ Matrix c; memset(c.A, 0, sizeof(c.A)); int i, j, k; for (i = 1; i <= R; i++) for (j = 1; j <= b.C; j++) for (k = 1; k <= C; k++) c.A[i][j] = (c.A[i][j] + (A[i][k] * b.A[k][j]) % MOD) % MOD; c.R = R; c.C = b.C; return c;}void dfs(int a,int b,int t,int c){ if(t==4) { X.A[c+1][b+1]=1; return; } if(a&(1<
> 1; X = X*X; } Z = Z*Y; printf("%lld\n",Z.A[1][16]);}int main(){ while(~scanf("%lld%lld",&n,&MOD)) { if(n==0&&MOD==0) break; n++; init(); work(); } return 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/5740777.html

你可能感兴趣的文章
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
根据调试工具看Vue源码之组件通信(一)
查看>>
Thrift RPC 系列教程(5)—— 接口设计篇:struct & enum设计
查看>>
斯坦福-随机图模型-week1.5
查看>>
灵活的运用Model类
查看>>
页面和应用之间的交互
查看>>
hadoop 之分布式安装
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>