我们人为地搞出来一个全能神,每次调用他他可以给一个节点 \(1\) 个石头。

这样,当前的状态就可以由上一秒的状态搞过来,这就像是一个递推。用矩阵加速。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
int n, m, t, act, len[15], wdt[105], hmn;
char ss[15][15];
ll ans;
struct MATRIX{
ll num[105][105];
MATRIX operator*(const MATRIX &x)const{
MATRIX re;
for(int i=0; i<=n*m; i++)
for(int j=0; j<=n*m; j++){
re.num[i][j] = 0;
for(int k=0; k<=n*m; k++)
re.num[i][j] += num[i][k] * x.num[k][j];
}
return re;
}
}yuan, zhu[65], dark, dan;
int getNum(int x, int y){
return (x-1)*m+y;
}
void build(int x){
for(int i=0; i<=n*m; i++){
if(i==0) zhu[x].num[0][i] = 1;
else{
int xx=(i-1)/m+1;
int yy=i-(xx-1)*m;
int pos=(x-1)%len[wdt[i]];
char ch=ss[wdt[i]][pos];
if(ch>='0' && ch<='9') zhu[x].num[0][i] = ch - '0', zhu[x].num[i][i] = 1;
else if(ch=='D') ;
else if(ch=='N' && xx>1)
zhu[x].num[i][getNum(xx-1,yy)] = 1;
else if(ch=='S' && xx<n)
zhu[x].num[i][getNum(xx+1,yy)] = 1;
else if(ch=='W' && yy>1)
zhu[x].num[i][getNum(xx,yy-1)] = 1;
else if(ch=='E' && yy<m)
zhu[x].num[i][getNum(xx,yy+1)] = 1;
}
}
}
MATRIX ksm(MATRIX a, int b){
MATRIX re=dan;
while(b){
if(b&1) re = re * a;
a = a * a;
b >>= 1;
}
return re;
}
int main(){
yuan.num[0][0] = 1;
cin>>n>>m>>t>>act;
for(int i=0; i<=n*m; i++)
dan.num[i][i] = 1;
dark = dan;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
scanf("%1d", &wdt[getNum(i,j)]);
for(int i=0; i<act; i++){
scanf("%s", ss[i]);
len[i] = strlen(ss[i]);
}
for(int i=1; i<=60; i++){
build(i);
dark = dark*zhu[i];
}
hmn = t / 60;
t = t - hmn * 60;
MATRIX qwq=ksm(dark, hmn);
for(int i=1; i<=t; i++)
qwq = qwq * zhu[i];
qwq = yuan*qwq;
for(int i=1; i<=n*m; i++)
ans = max(ans, qwq.num[0][i]);
cout<<ans<<endl;
return 0;
}

bzoj2973 入门oj4798 石头游戏的更多相关文章

  1. BZOJ 2973 入门OJ4798 石头游戏

    矩阵递推 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring ...

  2. 【BZOJ2973】石头游戏 矩阵乘法

    [BZOJ2973]石头游戏 Description 石头游戏的规则是这样的. 石头游戏在一个n行m列的方格阵上进行.每个格子对应了一个编号在0~9之间的操作序列. 操作序列是一个长度不超过6且循环执 ...

  3. CH3401 石头游戏(矩阵快速幂加速递推)

    题目链接:传送门 题目: 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (≤n,m≤) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数 ...

  4. 【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)

    [BZOJ2000][HNOI2000]取石头游戏(贪心,博弈论) 题面 BZOJ 洛谷 题解 这题好神仙啊,窝不会QaQ. 假装一下只有三个元素\(a_{i-1},a_i,a_{i+1}\),并且满 ...

  5. CH 3401 - 石头游戏 - [矩阵快速幂加速递推]

    题目链接:传送门 描述石头游戏在一个 $n$ 行 $m$ 列 ($1 \le n,m \le 8$) 的网格上进行,每个格子对应一种操作序列,操作序列至多有 $10$ 种,分别用 $0 \sim 9$ ...

  6. CH3401 石头游戏

    题意 3401 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (1≤n,m≤8) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数字指明 ...

  7. [luogu] P3210 [HNOI2010]取石头游戏(贪心)

    P3210 [HNOI2010]取石头游戏 题目描述 A 公司正在举办一个智力双人游戏比赛----取石子游戏,游戏的获胜者将会获得 A 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...

  8. 7月18日刷题记录 二分答案跳石头游戏Getting

    通过数:1 明天就要暑假编程集训啦~莫名开心 今天做出了一道 二分答案题(好艰辛鸭) 1049: B13-二分-跳石头游戏(二分答案) 时间限制: 5 Sec  内存限制: 256 MB提交: 30  ...

  9. 牛客1024B 石头游戏

    题目描述 石头游戏在一个 \(n\) 行 \(m\) 列 \((1\leq n,m \leq 8)(1≤n,m≤8)\) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这1 ...

随机推荐

  1. python之请求报文对比(假定最多二维字典)

    两段请求报文,判断不一样的key和value,只判断d2里和d1不同的值,和全部不同的key ok_req={ "version": "9.0.0", &quo ...

  2. 优先队列 HDOJ 5437 Alisha's Party

    题目传送门 题意:一人过生日,很多人排着队送礼物.排队顺序是礼物价值大的优先,如果相等先来的优先.有m次开门,当t个人到了会开门让p个人进门.最后一次让门外的所有人按顺序进门.有q次询问,问第x个进门 ...

  3. TNS-12508 When Issuing Any SET Command For The Listene

    TNS-12508 When Issuing Any SET Command For The Listener fact: Oracle Net Services    fact: TNS Liste ...

  4. Java 关键字volatile的解释

    volatile 关键字特征: 1.可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的.可以禁止线程的工作内存对volatile修饰的变量进行缓存,并将修改的变量立即写入主存. 2. ...

  5. elasticsearch-sql安装

    Github地址:https://github.com/NLPchina/elasticsearch-sql elasticsearch-sql插件可以方便我们使用SQL语言来对elasticsear ...

  6. Java断点续传(基于socket与RandomAccessFile的简单实现)

    Java断点续传(基于socket与RandomAccessFile的简单实现) 这是一个简单的C/S架构,基本实现思路是将服务器注册至某个空闲端口用来监视并处理每个客户端的传输请求. 客户端先获得用 ...

  7. CCF|学生排队|Java

    import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Sc ...

  8. 微信小程序组件解读和分析:一、view(视图容器 )

    view组件说明:    视图容器    跟HTML代码中的DIV一样,可以包裹其他的组件,也可以被包裹在其他的组件内部.用起来比较自由随意,没有固定的结构. view组件的用法: 示例项目的wxml ...

  9. xcode6的项目中虚拟键盘无法弹出

    这是因为Xcode6中的模拟器键盘设置跟之前的版本不一样了.之前版本是模拟器的键盘和电脑的键盘都可以使用,但是Xcode6的模拟器键盘只能使用一种,即要么是模拟器键盘,要么是电脑键盘.快捷键切换键盘类 ...

  10. SQLite – GLOB子句

    SQLite – GLOB子句 .与LIKE不同,GLOB是大小写敏感的,它遵循语法的UNIX指定以下通配符. The asterisk sign (*) The question mark (?) ...