我们人为地搞出来一个全能神,每次调用他他可以给一个节点 \(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. bzoj1854 [Scoi2010]游戏【构图 并查集】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1854 没想到怎么做真是不应该,看到每个武器都有两个属性,应该要想到连边构图的!太不应该了! ...

  2. Kruskal HDOJ 1233 还是畅通工程

    题目传送门 /* 最小生成树之kruskal算法--并查集(数据结构)实现 建立一个结构体,记录两点和它们的距离,依照距离升序排序 不连通就累加距离,即为最小生成树的长度 */ #include &l ...

  3. 香港药品 ref

    --公牛牌风湿骨刺丹30粒 参考网站--http://item.jd.com/1955815605.html?gjz=0#comments-list 88 --参考网站1,没有 http://www. ...

  4. JavaScript入门2

    5.document对象:Document对象是window对象的一个对象属性,代表浏览器窗口中装载的整个HTML文档.文档中的每个HTML元素对应着JavaScript对象. 因为document代 ...

  5. Python实现决策树C4.5算法

    为什么要改进成C4.5算法 原理 C4.5算法是在ID3算法上的一种改进,它与ID3算法最大的区别就是特征选择上有所不同,一个是基于信息增益比,一个是基于信息增益. 之所以这样做是因为信息增益倾向于选 ...

  6. postman断言分析

    最近测试中用到postman,使用后就简单总结下常用的断言,下面带图的自己最常用的,其他的没怎么用. postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 断言 ...

  7. 通用mapper的generator

    <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-genera ...

  8. AJPFX总结String类的特点

          String str = "abc"; str就是String的一个对象         字符串一旦被赋值, 值就不能再被改变了         举例:String s ...

  9. sys模块详解

    1.sys.argv argv是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序.这个变量其实是一个List,argv[0] 一般是“被调用的脚本文件名 ...

  10. ArcGIS Desktop新建postgresql版sde(10.4.1)的连接

    假设连接到的sde数据库是pg数据库,其他参数包括: ip:10.0.0.8 数据库:sde1 用户:sde 密码:sde 打开catalog,新建数据库连接 按如下输入数据库连接参数 红框1是数据库 ...