Description###

现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角。每一步它向右跳奇数列,且跳到本行或相邻行。跳越期间,马不能离开棋盘。例如,当n = 3, m = 10时,下图是一种可行的跳法。

试求跳法种数mod 30011。

Input###

仅有一行,包含两个正整数n, m,表示棋盘的规模。

Output###

仅有一行,包含一个整数,即跳法种数mod 30011。

Sample Input###

3 5

Sample Output###

10

HINT###

对于100%的数据,1 ≤ n ≤ 50,2 ≤ m ≤ 10^9


想法##

其实就是矩阵随便转移一下就出来了。。。

分奇偶列考虑,记录每行奇数列及偶数列的sum

像我这么lazy的人,就直接一列列转移了。。。

转移矩阵:

\[\begin{bmatrix}
0&0&0&…&0&1&0&0&…&0\\
0&0&0&…&0&0&1&0&…&0 \\
0&0&0&…&0&0&0&1&…&0 \\
…&&&&&…&&&&\\
0&0&0&…&0&0&0&0&…&1 \\
1&0&0&…&0&1&1&0&…&0 \\
0&1&0&…&0&1&1&1&…&0 \\
0&0&1&…&0&0&1&1&…&0 \\
…&&&&&…&&&&\\
0&0&0&…&1&0&0&0&…&1 \\
\end{bmatrix}
\quad
\]


代码##

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring> #define P 30011 using namespace std; const int SZ = 105; int n,m; struct matrix{
int a[SZ][SZ];
matrix() { memset(a,0,sizeof(a)); }
void init() { for(int i=0;i<SZ;i++) a[i][i]=1; }
matrix operator * (const matrix &b) const{
matrix c;
for(int i=0;i<n*2;i++)
for(int j=0;j<n*2;j++)
for(int k=0;k<n*2;k++)
(c.a[i][j]+=a[i][k]*b.a[k][j])%=P;
return c;
}
matrix operator *= (const matrix &b) { return *this=*this*b; }
};
matrix Pow_mod(matrix x,int y){
matrix ret; ret.init();
while(y){
if(y&1) ret*=x;
x*=x;
y>>=1;
}
return ret;
} int main()
{
scanf("%d%d",&n,&m); int ans;
matrix a,b;
for(int i=0;i<n;i++)
a.a[i+n][i]=a.a[i][n+i]=1;
for(int i=1;i<n-1;i++)
a.a[i+n][i+n]=a.a[i-1+n][i+n]=a.a[i+1+n][i+n]=1;
a.a[n][n]=a.a[2*n-1][2*n-1]=1;
if(n!=1) a.a[n+1][n]=a.a[2*n-2][2*n-1]=1; b.a[0][0]=b.a[0][n]=b.a[0][n+1]=1;
if(m==2) { printf("%d\n",b.a[0][2*n-1]); return 0; } b=b*(Pow_mod(a,m-3));
ans=b.a[0][n-1];
b*=a;
ans=(b.a[0][n*2-1]-ans+P)%P;
printf("%d\n",ans); return 0;
}

最新文章

  1. stm32 加入 USE_STDPERIPH_DRIVER、STM32F10X_HD的原因
  2. C#代理那点事儿
  3. 41.把数组排成最小的数[Sort array to smallest value]
  4. mysql 常见的几个错误问题
  5. 【学习笔记】【C语言】指向结构体的指针
  6. Java中的5种同步辅助类
  7. 如何修改MFC发布程序的图标
  8. LogMaster4Net
  9. BZOJ_3282_Tree_LCT
  10. C#使用Http的Post方式请求webservice
  11. 习题集1b: 额外练习 (可选)
  12. 清除cookie
  13. 深入理解JS函数中this指针的指向
  14. 一个小demo 实用selenium 抓取淘宝搜索页面内的产品内容
  15. 【LeetCode】14. 最长公共前缀
  16. 【Hadoop 分布式部署 八:分布式协作框架Zookeeper架构功能讲解 及本地模式安装部署和命令使用 】
  17. Vue 项目骨架屏注入与实践
  18. python2和python3的内存使用情况
  19. cnn的说明
  20. jsTree 插件Ajax数据

热门文章

  1. RobotFramework+Appium 为了兼容iOS12,升级至Xcode10后,WebDriverAgent编译不通过:Undefind symbols for architecture x86_64
  2. 第二阶段:4.商业需求文档MRD:1.PRD-产品功能列表
  3. world 文档中表格旋转180&#176;
  4. TypeScript躬行记(7)——命名空间
  5. 面试必问之 ConcurrentHashMap 线程安全的具体实现方式
  6. 互联网项目中mysql应该选什么事务隔离级别
  7. 从零开始のcocos2dx生活(二)Node
  8. 编辑软件-&gt;&quot;Notepad++&quot;
  9. hadoop上下文信息获取方法
  10. vue项目使用v-charts的柱形图的各种样式和数据配置