洛谷 P3990 [SHOI2013]超级跳马 解题报告
P3990 [SHOI2013]超级跳马
题目描述
现有一个\(n\) 行 \(m\) 列的棋盘,一只马欲从棋盘的左上角跳到右下角。每一步它向右跳奇数列,且跳到本行或相邻行。跳越期间,马不能离开棋盘。
试求跳法种数\(\bmod 30011\)。
输入输出格式
输入格式:
仅有一行,包含两个正整数\(n, m\),表示棋盘的规模。
输出格式:
仅有一行,包含一个整数,即跳法种数\(\bmod 30011\)。
说明
对于\(10\%\)的数据,\(1 ≤ n ≤ 10\),\(2 ≤ m ≤ 10\);
对于\(50\%\)的数据,\(1 ≤ n ≤ 10\),\(2 ≤ m ≤ 10^5\);
对于\(80\%\)的数据,\(1 ≤ n ≤ 10\),\(2 ≤ m ≤ 10^9\);
对于\(100\%\)的数据,\(1 ≤ n ≤ 50\),\(2 ≤ m ≤ 10^9\)。
发现我的做法有点诡异...
思路:首先我们只考虑从左边某一列的转移,显然可以构造这样的一个转移矩阵
\]
然后设这个转移矩阵为\(T\),设第\(i\)列的答案矩阵为\(A_i\)
则\(A_n=T*(A_{n-1}+A_{n-3}+A_{n-5}+\dots)\)
\(A_{n-2}=T*(A_{n-3}+A_{n-5}+A_{n-7}+\dots)\)
那么有\(A_n=T*A_{n-1}+A_{n-2}\),发现这是个递推,于是再次构造矩阵加速转移
\]
然后大力搞就行了,复杂度\(O(2^3n^3\log t)\)
注意一点\(A_3=TA_2\)不符合递推式
Code:
#include <cstdio>
#include <cstring>
const int mod=30011;
int n,m;
struct matrix1
{
int dx[52][52];
matrix1(){memset(dx,0,sizeof(dx));}
matrix1 friend operator *(matrix1 n1,matrix1 n2)
{
matrix1 n3;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
(n3.dx[i][j]+=n1.dx[i][k]*n2.dx[k][j])%=mod;
return n3;
}
matrix1 friend operator +(matrix1 n1,matrix1 n2)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
(n1.dx[i][j]+=n2.dx[i][j])%=mod;
return n1;
}
};
struct matrix2
{
matrix1 dx[3][3];
matrix2(){matrix1();}
matrix2 friend operator *(matrix2 n1,matrix2 n2)
{
matrix2 n3;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int i1=1;i1<=n;i1++)
for(int j1=1;j1<=n;j1++)
n3.dx[i][j].dx[i1][j1]=0;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
n3.dx[i][j]=n3.dx[i][j]+n1.dx[i][k]*n2.dx[k][j];
return n3;
}
}S,T,F;
int main()
{
scanf("%d%d",&n,&m);
S.dx[1][1].dx[1][1]=S.dx[1][1].dx[2][1]=1;
for(int i=1;i<=n;i++)
{
T.dx[1][2].dx[i][i]=T.dx[2][1].dx[i][i]=1;
T.dx[1][1].dx[i][i]=T.dx[1][1].dx[i][i-1]=T.dx[1][1].dx[i][i+1]=1;
}
if(m==2) return printf("%d\n",S.dx[1][1].dx[n][1]),0;
m-=3,F=T;
while(m)
{
if(m&1) F=F*T;
T=T*T;
m>>=1;
}
S=F*S;
printf("%d\n",S.dx[1][1].dx[n][1]);
return 0;
}
2018.12.19
洛谷 P3990 [SHOI2013]超级跳马 解题报告的更多相关文章
- [bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马
Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...
- 洛谷 P3989 [SHOI2013]阶乘字符串 解题报告
P3989 [SHOI2013]阶乘字符串 题目描述 给定一个由前\(n(\le 26)\)个小写字母组成的串\(S(|S|\le 450)\).串\(S\)是阶乘字符串当且仅当前 \(n\) 个小写 ...
- 洛谷 P2048 [NOI2010]超级钢琴 解题报告
P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为 ...
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷 P2604 [ZJOI2010]网络扩容 解题报告
P2604 [ZJOI2010]网络扩容 题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. ...
随机推荐
- Windows下LimeSDR Mini使用说明
本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 LimeSDR链接:https://item.taobao.com/item.htm?spm=a230r.1 ...
- day23 正则,re模块
一. 简谈正则表达式 元字符 . 除了换行符外任意字符. \w 数字.字母.下划线 \s 空白符 \b 单词的末尾 \d 数字 \n 匹配换行符 \t 匹配制表符 \W 除了数字. 字母 下划线 \D ...
- 2019 年软件开发人员必学的编程语言 Top 3
AI 前线导读:这篇文章将探讨编程语言世界的现在和未来,这些语言让新一代软件开发者成为这个数字世界的关键参与者,他们让这个世界变得更健壮.连接更加紧密和更有意义.开发者要想在 2019 年脱颖而出,这 ...
- 微信JS-SDK实现上传图片功能
最近在项目开发中,有一个在微信WEB项目中上传图片的需求,一开始使用了传统的<input type="file">的方式去实现,但是后面发现在使用这种传统模式时会由于手 ...
- spring boot+mybatis+swagger搭建
环境概述 使用的开发工具:idea 2018 3.4 环境:jdk1.8 数据库:MariaDB (10.2.21) 包管理:Maven 3.5 Web容器:Tomcat 8.0 开发机系统:Wind ...
- nginx 在ubuntu上使用笔记(绑定域名)
1. 重启nginx的两个语句: sudo service nginx restart sudo nginx -s reload 2. nginx配置文件路径: etc/nginx/ 尤其是 site ...
- LVS 负载均衡 keepalive
为什么要学lvs 工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名.目录结构, Nginx单凭这点可利用的场合就远多于LVS了.最新版本的Nginx也支持4层TCP负载,曾经这 ...
- centos7安装oracle的一些问题
在配置监听的时候尝试了很多次都是不能创建,最后将 /data/oracle/product/11.2.0/db_1/network/admin目录下的listener.ora和tnsname.ora两 ...
- CentOs6.5中安装和配置vsftp简明教程[转]
CentOs6.5中安装和配置vsftp简明教程 林涛 发表于:2017-3-17 10:10 分类:WebServer 标签: 101次 一.vsftp安装篇 复制代码代码如下: # 安装vsftp ...
- Daily scrum 2015.10.19
这周是我们团队项目开始的第一周.我们的团队项目是“北航社团平台”,一个致力于打造北航社团资讯整合.社团工作服务与社团商品销售的一站式网络平台. 一.会议内容 1. 总体分工,江昊同学担任项目PM,王若 ...