题目

分析

设表示每一行的状态,用一个4位的二进制来表示,当前这一行中的每一个位数对下一位有没有影响。

设\(f_{i,s}\)表示,做完了的i行,其状态为s,的方案数。

两个状态之间是否可以转移就留给读者自己思考了。

答案就是\(f_{n,0}\)因为最后一行对下一行不能造成影响。

然而,这样只有60分。

100分是个矩阵快速幂,

B矩阵构造很简单,当两个状态\(s、s'\)可以转移,那么,B矩阵\(g_{s,s'}=1\)。

当i等于零时, A矩阵为{1, 0 \(<\)repeats 15 times\(>\)}

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const long long maxlongint=2147483647;
const long long N=500005;
using namespace std;
long long m,n,e[16][16]=
{
{1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1},
{0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0},
{0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},
{0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
long long r[16]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},f[16],g[16][16];
long long time()
{
long long f1[16];
for(int i=0;i<=15;i++)
f1[i]=f[i];
for(int i=0;i<=15;i++)
{
f[i]=0;
for(int j=0;j<=15;j++)
f[i]=(f[i]+f1[j]*g[j][i]%m)%m;
}
}
long long time1()
{
long long f1[16][16];
for(int i=0;i<=15;i++)
for(int j=0;j<=15;j++)
f1[i][j]=g[i][j];
for(int i=0;i<=15;i++)
for(int j=0;j<=15;j++)
{
g[i][j]=0;
for(int k=0;k<=15;k++)
{
g[i][j]=(g[i][j]+f1[i][k]*f1[k][j]%m)%m;
}
}
}
long long mi(long long x)
{
while(x)
{
if(x&1) time();
time1();
x/=2;
}
}
int main()
{
while(1)
{
for(int i=0;i<=15;i++)
f[i]=r[i];
for(int i=0;i<=15;i++)
for(int j=0;j<=15;j++)
g[i][j]=e[i][j];
scanf("%lld%lld",&n,&m);
if(n==0 && m==0) break;
mi(n);
cout<<f[0]<<endl;
}
}

最新文章

  1. Zabbix 漏洞分析
  2. WeX5 - AJAX跨域调用相关知识-CORS和JSONP
  3. 制作具有SSH、MySQL功能的Chroot
  4. HOW TO BE SINGLE 最后那段的摘录
  5. OpenGL 学习
  6. QT Creater + vs2010 发布程序
  7. leetcode@ [352] Data Stream as Disjoint Intervals (Binary Search &amp; TreeSet)
  8. TSQL基础(二)
  9. java中collection、map、set、list简介 (转)
  10. hdu 1051Wooden Sticks
  11. zoj 2156 - Charlie&amp;#39;s Change
  12. 怎样使用万用表来测试板子上的TX和RX引脚
  13. 概括一下nodejs
  14. linux下Tab及shell 补全python
  15. [BZOJ]3243 向量内积(Noi2013)
  16. jquery-confirm使用方法
  17. JavaScript数据类型之文本类型
  18. 【C++ Primer | 03】字符串、向量和数组
  19. 【20180409】IT管理之IT十二条令
  20. Redis详解(七)------ AOF 持久化

热门文章

  1. argparse:命令行参数解析详解
  2. 插座-网络问题-ESP8266
  3. 《剑指offer》面试题6 重建二叉树 Java版
  4. linux服务器之间互传文件
  5. 解决移动端浏览器 HTML 音频不能自动播放的三种方法
  6. 04: CI(持续集成)/CD(持续交付/持续部署)
  7. neo4j开发自定义存储过程注意事项
  8. [Next] 二.next.js之组件
  9. 10.AutoMapper 之自定义值解析器(Custom Value Resolvers)
  10. java中&lt;&lt;,&gt;&gt;和&gt;&gt;&gt;的含义