【BZOJ2973】石头游戏 矩阵乘法
【BZOJ2973】石头游戏
Description
Input
Output
Sample Input
011112
1E
E
0
Sample Output
【样例解释】
这是另一个类似于传送带的结构。左边的设备0间隔地产生石头并向东传送。设备1向右传送,直到设备2。10秒后,总共产生了5个石头,2个在传送带上,3个在最右边。
【数据约定】
0≤n, m≤8。
1≤act≤10。
1≤t≤10^9。
题解:跟沼泽鳄鱼那道题差不多,只不过周期变成了60。那我们构造60个转移矩阵f[0..59],它们的乘积为x。那么ans=x^(T/12)*f[0..T%12]。至于怎么构造矩阵。。自己yy一下就好了吧?
又一次get了惨痛的历史教训,矩乘不满足交换律,所以一定要先ans*=x^(T/12)再ans*=f[0..T%12]。
#include <cstdio>
#include <cstring>
#include <iostream>
#define P(A,B) ((A-1)*m+B)
using namespace std;
typedef long long ll;
typedef struct matrix
{
ll v[100][100];
}M;
M ans,x,emp,f[65];
int n,m,tim,act;
int len[20];
ll maxx;
char A[20][20],B[20][20],ch;
M mmul(M a,M b)
{
M c=emp;
int i,j,k;
for(i=0;i<=n*m;i++)
for(j=0;j<=n*m;j++)
for(k=0;k<=n*m;k++)
c.v[i][j]+=a.v[i][k]*b.v[k][j];
return c;
}
void pm(int y)
{
while(y)
{
if(y&1) ans=mmul(ans,x);
x=mmul(x,x),y>>=1;
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&tim,&act);
int i,j,k,l,a,b;
for(i=1;i<=n;i++) scanf("%s",A[i]);
for(i=0;i<act;i++) scanf("%s",B[i]),len[i]=strlen(B[i]);
for(i=0;i<=n*m;i++) x.v[i][i]=1;
ans.v[0][0]=1;
for(l=0;l<60;l++)
{
f[l].v[0][0]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
k=A[i][j-1]-'0',ch=B[k][l%len[k]];
if(ch>='0'&&ch<='9') f[l].v[P(i,j)][P(i,j)]=1,f[l].v[0][P(i,j)]=ch-'0';
if(ch=='N'&&i>1) f[l].v[P(i,j)][P(i-1,j)]=1;
if(ch=='W'&&j>1) f[l].v[P(i,j)][P(i,j-1)]=1;
if(ch=='S'&&i<n) f[l].v[P(i,j)][P(i+1,j)]=1;
if(ch=='E'&&j<m) f[l].v[P(i,j)][P(i,j+1)]=1;
}
}
x=mmul(x,f[l]);
}
pm(tim/60);
for(i=0;i<tim%60;i++) ans=mmul(ans,f[i]);
for(i=1;i<=n*m;i++) maxx=max(maxx,ans.v[0][i]);
printf("%lld",maxx);
return 0;
}
【BZOJ2973】石头游戏 矩阵乘法的更多相关文章
- bzoj2973石头游戏——矩阵乘法
题目:权限题! 写了一下,但提交不了,先放着吧. 代码如下: #include<iostream> #include<cstdio> #include<cstring&g ...
- AcWing 206. 石头游戏 矩阵乘法|矩阵快速幂
AcWing 206. 石头游戏 石头游戏在一个 n 行 m 列 (1≤n,m≤8) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数字指明. 操作序列是一个长度不 ...
- bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 613 Solved: 256[Submit][Status] ...
- CH 3401 - 石头游戏 - [矩阵快速幂加速递推]
题目链接:传送门 描述石头游戏在一个 $n$ 行 $m$ 列 ($1 \le n,m \le 8$) 的网格上进行,每个格子对应一种操作序列,操作序列至多有 $10$ 种,分别用 $0 \sim 9$ ...
- BZOJ2973 : 石头游戏
考虑到$lcm(1,2,3,4,5,6)=60$,所以操作序列每60秒一个循环. 将操作表示成转移矩阵的形式,预处理出前60秒的转移矩阵以及它们的乘积$B$. 那么t秒的转移矩阵为前$t\bmod 6 ...
- CH3401 石头游戏(矩阵快速幂加速递推)
题目链接:传送门 题目: 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (≤n,m≤) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数 ...
- 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...
- 【bzoj1444】[Jsoi2009]有趣的游戏 AC自动机+矩阵乘法
题目描述 输入 注意 是0<=P 输出 样例输入 样例输出 题解 AC自动机+矩阵乘法 先将所有字符串放到AC自动机中,求出Trie图. 然后构建邻接矩阵:如果x不是某个字符串的末位置,则x连向 ...
- BZOJ 1444 [JSOI2009]有趣的游戏 (AC自动机、概率与期望DP、矩阵乘法)
诶这题洛谷居然没有??? 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1444 题解: 我见到主要有三种做法. 一是矩阵乘法.设\(d ...
随机推荐
- jenkins二
破解管理员密码 1.假如我们忘记了Jenkins管理员密码了该怎么办呢?Jenkins没有用到数据库,所有的文件都是保存到xml文件里的 2.第一步找到admin所在的目录 [root@centos- ...
- 使用sqlplus连接提示:ORA-28002: the password will expire within 7 days
今天在使用sqlplus时出现,或使用数据库的时候出现类似问题 =============================================== ERROR:ORA-28002: the ...
- Sublime Text 使用指南 - 前端开发神器
Sublime Text 前端开发的神器 Sublime Text是一个前端开发者必备的编辑器,大量的插件,完善的功能,优越的性能,有非常多的特色,给前端开发提供了一个完善的开发条件. 本文主要介绍的 ...
- spring in action 7.1 小结
0 AbstractAnnotationConfigDispatcherServletInitializer剖析,在Servlet 3.0环境中,容器会在类路径中查找实现ServletContaine ...
- C#获取局域网MAC地址
效果: 说明:获取本局域网的MAC地址(非本机的MAC地址) 代码: /// <summary> /// 获取网卡物理地址 /// </summa ...
- RSA加密的测试demo
使用.net自带的RSA,需要引用System.Security.Cryptography 测试环境.net4.6 static void Main(string[] args) { var RSA ...
- 计算机图形学(一) 视频显示设备_1_CRT原理
第 1 章 图形系统概述 如今.计算机图形学的作用与应用已经得到了广泛承认.大量的图形硬件和软件系统已经应用 到了差点儿全部的领域.通用计算机甚至很多手持计算器也已经普遍具备 二维及三维 ...
- 《Google软件测试之道》- Google软件测试介绍
<Google软件测试之道>- Google软件测试介绍 2015-05-21 目录 1 质量与测试 2 角色 3 组织结构 4 爬.走.跑 5 测试类型 相关链接 与Micro ...
- VS调试-添加命令行参数
Project -> Properties -> Configuration Properties -> Debugging 在Command Arguments里填上即可
- Nginx 常见问题解决
如果提示端口已经被占用: probably another instance of uWSGI is running on the same address (:8002). bind(): Addr ...