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 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...
随机推荐
- Java-NestedClass(Interface).
内部类(Nested Class) 内部类:即在一个类中还包含着另外一个类,一般是作为匿名类或者是使用数据隐藏时使用的.例子: //内部类 class Out{ private int age = 1 ...
- Gym 100342I Travel Agency (Tarjan)
题意读懂了就好做了,就是求一下点双连通分量.维护一下一颗子树的结点数,对于一个结点当u是割点的时候, 统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一 ...
- elasticsearch最全详细使用教程:搜索详解
一.搜索API 1. 搜索API 端点地址从索引tweet里面搜索字段user为kimchy的记录 GET /twitter/_search?q=user:kimchy从索引tweet,user里面搜 ...
- mac上使用命令行显示隐藏文件
终端中输入命令 打开<终端> - 粘贴下面的两行命令执行 defaults write com.apple.finder AppleShowAllFiles TRUEkillall Fin ...
- win7上安装虚拟机并上网
一.安装Workstation Pro 二.下载CentOS-7-x86_64-DVD-1511.iso包 三.创建新的虚拟机,按照向导安装即可 四.使用cd /etc/sysconfig/netwo ...
- java第十次作业:oop的第6张图片到第11张图片
- 【数学 exgcd】bzoj1407: [Noi2002]Savage
exgcd解不定方程时候$abs()$不能乱加 Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...
- 【树状数组 思维题】luoguP3616 富金森林公园
树状数组.差分.前缀和.离散化 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积 ...
- 简易的mysql性能查询脚本
#!/bin/bash mysqladmin -P3306 -uroot -p -h127. -r -i ext |\ awk -F"|" \ "BEGIN{ count ...
- 如何利用 CSS 动画原理,在页面上表现日蚀现象
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OELvrK 可交互视频教 ...