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 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...
随机推荐
- jquery分页组件(每页显示多少条)
/** * 功能说明:jPager 分页插件 * 参数说明:pages:[] 分页的控件个数 @id:显示分页的div ID,@showSelectPage: 是否显示当前分页的条目过滤下拉框 * @ ...
- org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/home/index2", template might not exist or might not be accessible by any of the configured Template Resolvers
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/home/index2", ...
- ES6新增rest的用法
arguments类似Array但是并不是Array 而rest就是一个Array 用rest替代atguments eg:给数组排序 //arguments变量的写法: function sortF ...
- 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
- ewebeditor上传文件大小
做项目大家都少不了要跟html在线编辑器打交道,这里我把我的一些使用经验及遇到的问题发出来和大家交流一下. Ewebeditor使用说明:一.部署方式:1.直接把压缩目录中的文件拷贝到您的网站发布目录 ...
- 详解Mac睡眠模式设置
详解Mac睡眠模式设置 原文链接:http://www.insanelymac.com/forum/index.php?showtopic=281945 需要说明的是,首先这篇文章是针对已经能够成功睡 ...
- Ubuntu美化
Ubuntu美化 觉得ubuntu18.04的界面太丑了,所以决定美化一下. 整了好长时间特别费事.所以写个随笔记录一下. 安装gnome-tweak-tool和gnome-shell-extensi ...
- MySql中引擎
1. InnoDB 引擎 MySQL 5.5 及以后版本中的默认存储引擎,它的优点如下:灾难恢复性好,支持事务,使用行级锁,支持外键关联,支持热备份. InnoDB引擎中的表,其数据的物理组织形式是簇 ...
- vue-music:歌词的其他功能
由于歌词的播放需要歌曲播放,切换歌曲,歌曲的播放模式等等有关联,因此,需要在这几处处理相关问题 1.循环播放回不到开始位置 loop() { this.$refs.audio.currentTime ...
- perl学习之子程序
一.定义子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读.PERL中,子程序可以出现在程序的任何地方.定义方法为:sub subroutine{statements;}二.调 ...