[bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马
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的人,就直接一列列转移了。。。
转移矩阵:
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;
}
[bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马的更多相关文章
- 洛谷 P3990 [SHOI2013]超级跳马 解题报告
P3990 [SHOI2013]超级跳马 题目描述 现有一个\(n\) 行 \(m\) 列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘. ...
- BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4417 (luogu)https://www.luogu.org/prob ...
- Luogu P3990 [SHOI2013]超级跳马
这道题还是一道比较不可做的矩阵题 首先我们先YY一个递推的算法:令f[i][j]表示走到第i行第j列时的方案数,那么有以下转移: f[i][j]=f[i-1][j-2*k+1]+f[i+1][j-2* ...
- P3990 [SHOI2013]超级跳马
传送门 首先不难设\(f[i][j]\)表示跳到\((i,j)\)的方案数,那么不难得到如下转移 \[f[i][j]=\sum\limits_{k=1}^{\frac n2}f[i-2k+1][j-1 ...
- [BZOJ 4417][Shoi2013]超级跳马
4417: [Shoi2013]超级跳马 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 379 Solved: 230[Submit][Status ...
- 洛谷 P3998 [SHOI2013]发微博
洛谷 P3998 [SHOI2013]发微博 洛谷传送门 题目描述 刚开通的 SH 微博共有n个用户(1Ln标号),在这短短一个月的时间内, 用户们活动频繁,共有m 条按时间顺序的记录: ! x 表示 ...
- [洛谷P2048] [NOI2010] 超级钢琴
洛谷题目链接:[NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号 ...
- [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...
- BZOJ4417: [Shoi2013]超级跳马
Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...
随机推荐
- 【31.42%】【CF 714A】Meeting of Old Friends
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- Vue 扩展插件
- javascript基础之循环
//while循环 <script type="text/javascript"> i = 1; while (i <= 6) { document.write( ...
- Lede定时重拨
系统,计划任务, 0 4 * * * ifup wan 梅林定时重拨: #! /bin/sh #断开拨号连接 killall pppd #延时10秒 #重新拨号 pppd >& &a ...
- IDEA比较实用的插件之翻译插件(Translation)
插件名称:Translation 安装步骤:Mac 2019.2的IDEA安装步骤如下 InteIIij IDEA --> Preference --> Other Setting --& ...
- 运行APP脚本的步骤
1.打开ride(可运行命令:ride.py) 2.启动Appium 3.启动android-sdk\tools\uiantomatorviewer.bat(目的是为了抓取设备元素ID)
- 它来了,它来了,centos 8 的时代到来了
简介 Centos 8 已经在2019年9月24日正式发布.由于这是从Red Hat Enterprise Linux(RHEL)派生的Linux发行版,因此CentOS团队必须构建基础结构来支持新引 ...
- cocos2dx 仿射变换
AffineTransform __CCAffineTransformMake(float a, float b, float c, float d, float tx, float ty) { Af ...
- __FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__的使用
C/C++ 有5个常用的预定义宏,可以当作变量直接使用 __FILE__,__FUNCTION __,__LINE__,__DATE__,__TIME__. 注意是两个下划线. 其含义如下: __FI ...
- 洛谷$P2150\ [NOI2015]$寿司晚宴 $dp$
正解:$dp$ 解题报告: 传送门$QwQ$. 遇事不决写$dp$($bushi$.讲道理这题一看就感觉除了$dp$也没啥很好的算法能做了,于是考虑$dp$呗 先看部分分?$30pts$发现质因数个数 ...