我们人为地搞出来一个全能神,每次调用他他可以给一个节点 \(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. 第05课 Linux命令初探(一)

    该篇为第一部分,主要介绍的Linux指令有: mkdir.cd.ls.rm.touch.vi/vim.echo.cat.cp.mv.pwd.rm.rmdir 1.创建一个目录/data 提示:Wind ...

  2. 153 Find Minimum in Rotated Sorted Array 旋转数组的最小值

    假设一个按照升序排列的有序数组从某未知的位置旋转.(比如 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2).找到其中最小的元素.你可以假设数组中不存在重复的元素.详见:https:/ ...

  3. 【转】在 26 岁时写给 18 岁的自己--Livid

    原文:http://livid.v2ex.com/essays/2012/01/24/a-letter-from-26-to-18/ 我知道现在的自己是再也回不去的了.可是倘若有机会,我是多么希望能让 ...

  4. 分布式数据存储 之 Redis(一) —— 初识Redis

    分布式数据存储 之 Redis(一) -- 初识Redis 为什么要学习并运用Redis?Redis有什么好处?我们步入Redis的海洋,初识Redis. 一.Redis是什么 ​ Redis 是一个 ...

  5. 安装mysql时 make 时 提示 redeclaration of C++ built-in type ‘bool’ 错误

    安装mysql时 make 时 提示 redeclaration of C++ built-in type ‘bool’ 错误 由于gcc-c++是在./configure后进行编译的 重新./con ...

  6. toast插件的简单封装(样式适用pc后台管理系统的场景)

    直接分三个步骤吧: 1.手写一个toast.vue组件 <template> <transition name="toast-fade"> <div ...

  7. HDU 4465 Candy (数学期望)

    题意:有两个盒子各有n个糖(n<=2*105),每天随机选1个(概率分别为p,1-p),然后吃掉一颗糖.直到有一天打开盒子一看,这个盒子没有糖了.输入n,p,求此时另一个盒子里糖的个数的数学期望 ...

  8. [Python筆記] 將 Pandas 的 Dataframe 寫入 Sqlite3

    使用 pandas.io 寫入 Sqlite import sqlite3 as lite from pandas.io import sql import pandas as pd 依照 if_ex ...

  9. ChromiumWebBrowser禁止鼠标右键和拖动

    在屏蔽之前先查看namespace CefSharp.WinForms内的代码 public class ChromiumWebBrowser : Control, IWebBrowserIntern ...

  10. centos7 系统安全加固方案

    一.密码长度与有效期 默认配置: [root@i-1y3we23j ~]# cat /etc/login.defs |grep PASS_ |grep -v '#' PASS_MAX_DAYS PAS ...