BZOJ 2973 入门OJ4798 石头游戏
矩阵递推
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define ll long long
#include <algorithm>
using namespace std;
int n, m, t, act;
int opt[2000], len[100];
char s[20][70];
struct Matrix {
static const int N = 75;
ll num[N][N];
void clear() {
memset(num, 0, sizeof(num));
}
void unit(){
clear();
for(int i = 0; i < N; i++) num[i][i] = 1ll;
}
/*void print() {
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
printf("%d", num[i][j]);
}
cout<<endl;
}
cout<<endl;
} */
};
Matrix operator * (const Matrix & a, const Matrix & b) {
Matrix res;
res.clear();
for(int i = 0; i <= n * m; i++) {
for(int j = 0; j <= n * m; j++) {
for(int k = 0; k <= n * m; k++) {
res.num[i][j] += a.num[i][k] * b.num[k][j];
}
}
}
return res;
}
Matrix operator ^ (Matrix a, ll k) {
Matrix ans;
ans.unit();
while(k) {
if(k & 1ll) ans = ans * a;
a = a * a;
k >>= 1;
}
return ans;
}
Matrix build(int k) {
Matrix ans;
ans.clear();
ans.num[0][0] = 1ll;
for(int i = 1; i <= n * m; i++) {
int ind = opt[i], cur = k % len[ind];
switch (s[ind][cur]) {
case 'W' : if(i > 1) {ans.num[i][i - 1] = 1ll;}break;
case 'E' : if(i < m * n) {ans.num[i][i + 1] = 1ll;}break;
case 'N' : if(i > m) {ans.num[i][i - m] = 1ll;}break;
case 'S' : if(i < m * n - m) {ans.num[i][i + m] = 1ll;}break;
case 'D' : break;
default : ans.num[0][i] = s[ind][cur] - '0';ans.num[i][i] = 1ll;break;
}
}
return ans;
}
Matrix r1, r2, tmp;
int main() {
cin >> n >> m >> t >> act;
for(int i = 1; i <= n * m; i++) scanf("%1d", &opt[i]),opt[i]++;
for(int i = 1; i <= act; i++) cin>>s[i],len[i] = strlen(s[i]);
tmp.unit();
for(int i = 0; i < 60; i++) {
if(i == (t % 60)) r2 = tmp;
tmp = tmp * build(i);
}
r1 = tmp;
r1 = r1 ^ (t/60);
r1 = r1 * r2;
ll ma = 0ll;
for(int i = 1; i <= n * m; i++) ma = max(ma, r1.num[0][i]);
cout<<ma<<endl;
return 0;
}
BZOJ 2973 入门OJ4798 石头游戏的更多相关文章
- bzoj2973 入门oj4798 石头游戏
我们人为地搞出来一个全能神,每次调用他他可以给一个节点 \(1\) 个石头. 这样,当前的状态就可以由上一秒的状态搞过来,这就像是一个递推.用矩阵加速. #include <iostream&g ...
- 【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
[BZOJ2000][HNOI2000]取石头游戏(贪心,博弈论) 题面 BZOJ 洛谷 题解 这题好神仙啊,窝不会QaQ. 假装一下只有三个元素\(a_{i-1},a_i,a_{i+1}\),并且满 ...
- CH3401 石头游戏(矩阵快速幂加速递推)
题目链接:传送门 题目: 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (≤n,m≤) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数 ...
- BZOJ 1444:[JSOI2009]有趣的游戏
BZOJ 1444:[JSOI2009]有趣的游戏 题目链接 首先我们建出Trie图,然后高斯消元. 我们设\(f_i\)表示经过第\(i\)个点的期望次数: \[ f_x=\sum i\cdot p ...
- CH 3401 - 石头游戏 - [矩阵快速幂加速递推]
题目链接:传送门 描述石头游戏在一个 $n$ 行 $m$ 列 ($1 \le n,m \le 8$) 的网格上进行,每个格子对应一种操作序列,操作序列至多有 $10$ 种,分别用 $0 \sim 9$ ...
- CH3401 石头游戏
题意 3401 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (1≤n,m≤8) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数字指明 ...
- 【BZOJ2973】石头游戏 矩阵乘法
[BZOJ2973]石头游戏 Description 石头游戏的规则是这样的. 石头游戏在一个n行m列的方格阵上进行.每个格子对应了一个编号在0~9之间的操作序列. 操作序列是一个长度不超过6且循环执 ...
- bzoj 5393 [HAOI2018] 反色游戏
bzoj 5393 [HAOI2018] 反色游戏 Link Solution 最简单的性质:如果一个连通块黑点个数是奇数个,那么就是零(每次只能改变 \(0/2\) 个黑点) 所以我们只考虑偶数个黑 ...
- [luogu] P3210 [HNOI2010]取石头游戏(贪心)
P3210 [HNOI2010]取石头游戏 题目描述 A 公司正在举办一个智力双人游戏比赛----取石子游戏,游戏的获胜者将会获得 A 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...
随机推荐
- MFC技术积累——基于MFC对话框类的那些事儿3
3.3.2 创建图形画刷来实现位图加载 1.首先在Resource View中导入一幅位图,位图大小96×96像素: 2.其次在主对话框中添加一个静态文本资源,ID号是IDC_BITMAPAREA,添 ...
- Luogu P5349 幂
大力数学题,发现自己好久没写多项式水平急速下降,求逆都要写挂233 首先看到关于多项式的等比数列求和,我们容易想到先求出每一项的系数然后最后累加起来即可,即设\(f_i=\sum_{n=0}^{\in ...
- map最基本操作
#include<iostream> #include<map> using namespace std; int main() { /*map<int,char> ...
- dinner 后台 nodemon 部署 Koa (关闭everything 安装或排除node_modules) # mysql 没开192.168.x.x 需要设置一下 #Navicat Premium,mysql 数据库版本有要求:mysql-5.7.17.msi 对??的支持
tip1:新建数据库 记得选 字符集和排序规则 utf8 -- UTF-8 Unicode utf8_general_ci 后台链接部分 1. 全局管理员安装 nodemon,后台热部署(右键 管理员 ...
- 【转】IntelliJ 创建main函数快捷
http://blog.csdn.net/tiantiandjava/article/details/42269173 今天偶然发现了IntelliJ中 创建main函数的快捷键,依次还有for循环, ...
- 如何关闭OSX 10.11 SIP (System Integrity Protection)
http://www.jianshu.com/p/0572336a0771 注意:SIP功能是Apple在OSX上推出的系统完整性保护功能,对于普通MAC用户来说是一项安全保护功能,如果不了解他的作用 ...
- iOS UI 设计
优设 http://www.uisdc.com Sketch http://www.sketchcn.com
- 洛谷 P2370 P2370 yyy2015c01的U盘
https://www.luogu.org/problemnew/show/P2370 二分+背包 #include <algorithm> #include <iostream&g ...
- HDU-1455-木棒
这题的话,我们,定义一个结构体,然后把木棒从大到小排序. 这些木棒如果是由多根等长木棒组成的,那目标长度一定大于等于其中最长的木棒长度,所这就是我们搜索的下限. 上限就是所有的木棒组成了一根木棒,就是 ...
- [LUOGU] P1111 修复公路
题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...