题目地址

构建1维数组f(num(i,j)) -> 表示第num(i,j) =((i-1)*m + j)位的石头有多少个。(i,j)表示一个位置

可以知道f的长度为n*m+1.令f[0] = 1.方便后面加x个石头的操作。

构造:
1: 第(i,j)位置字符为’N’,且i>1,则令A[num(i,j)][num[i-1,j]] = 1.
这样在矩阵相乘的时候可以让让num(i,j)位置上的石头全部转移到num(i-1,j) 上面。(转义: 当计算f(num(i-1,j))列的时候,它会加上f (num(i,j))的值 )。
其他字符同理,'D’不用操作
2: 若是一个数字,则我们令A[0][num(i,j)] = x,且A[num(i,j)][num(i,j)] = 1.因为f[0]是1,所以乘的时候会把x倍的f[0],并且原来的数不变。
3: A[0][0] = 1.保证f[0] 为1.
4: 其他为0.

1~n的最小公倍数是60,所以每60秒会进行相同的操作。
令 A = A^60.
故我们可以得到公式 t = 60*q + r -> FtF_tFt​ = F0F_0F0​ * AqA^qAq * ∏i=1rAi\prod_{i=1}^r A_i∏i=1r​Ai​

这样计算即可,注意位置不能交换,交换则无
最后取一下max

代码:

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define int long long
#define sc scanf
#define pf printf
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned long long LL;const int INF = 0x3f3f3f3f;
const double eps = 1e-4;
const int mod = 10000;
const int N = 210;int a[N][N],f[N],op[N][N],A[N][N],C[N][N],AA[N][N];
string s[N];
int n,m,t,cnt;void mul1(int a[N][N],int c[N][N]){int p[N][N];memset(p,0,sizeof(p));for(int i=0;i<=n*m;i++)for(int j=0;j<=n*m;j++)for(int k=0;k<=n*m;k++)p[i][j] += a[i][k] * c[k][j];memcpy(A,p,sizeof(p));
}void mul2(int ff[N],int a[N][N]){int p[N];memset(p,0,sizeof(p));for(int i=0;i<=n*m;i++)for(int j=0;j<=n*m;j++)p[i] += ff[j] * a[j][i];memcpy(f,p,sizeof(p));
}void qmi_j(int b){while(b){if(b & 1) mul2(f,A);mul1(A,A);b >>= 1;}mul2(f,AA);//最后乘AAint ma = -INF;for(int i=1;i<=n*m;i++) ma = max(ma,f[i]);cout<<ma<<endl;
}void slove(){f[0] = 1;for(int T=1;T<=60;T++){//构造出A^60memset(C,0,sizeof(C));for(int i=1;i<=n;i++)//表达出C for(int j=1;j<=m;j++){int len = (int)s[op[i][j]].size();char x = s[op[i][j]][(T-1)%len];int pos = (i-1)*m + j;if(isdigit(x)){C[pos][pos] = 1;C[0][pos] = (int)(x-48);}else{if(x == 'N' && i>1) C[pos][pos-m] = 1;else if(x == 'W' && j>1) C[pos][pos-1] = 1;else if(x == 'S' && i<n) C[pos][pos+m] = 1;else if(x == 'E' && j<m) C[pos][pos+1] = 1;}}C[0][0] = 1;if(T == 1) memcpy(A,C,sizeof(C));else mul1(A,C);if(T == t%60) memcpy(AA,A,sizeof(A));当求到r时,存一下,不能直接乘}qmi_j(t/60);//矩阵快速幂
}signed main(){//  IOS;#ifdef ddgofreopen("C:/Users/asus/Desktop/ddgoin.txt","r",stdin);#endifcin>>n>>m>>t>>cnt;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)sc("%1lld",&op[i][j]);for(int i=0;i<cnt;i++) cin>>s[i];slove();return 0;
}

acwing 206 石头游戏 矩阵快速幂相关推荐

  1. [CSP-S模拟测试]:涂色游戏(DP+组合数+矩阵快速幂)

    题目描述 小$A$和小$B$在做游戏. 他们找到了一个$n$行$m$列呈网格状的画板.小$A$拿出了$p$支不同颜色的画笔,开始在上面涂色.看到小$A$涂好的画板,小$B$觉得颜色太单调了,于是把画板 ...

  2. 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】

    涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...

  3. 数字迷阵(矩阵快速幂+结论题)

    数字迷阵(矩阵快速幂+结论题) 题目描述 小可可参观科学博物馆时,看到一件藏品,上面有密密麻麻的数字,如下所示:    1   2   3   5    8    13   21   34   55 ...

  4. HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...

  5. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  6. [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)

    多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...

  7. 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15

    今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...

  8. 矩阵快速幂(矩阵加速)

    //南昌理工ACM集训队 放心食用 矩阵加速 快速幂(前置技能) 矩阵快速幂 可乐 附个模板 最后小结 本人小白如有不对欢迎指正ლ(╹◡╹ლ) 矩阵加速 快速幂(前置技能) 对于普通的求a的b次方,一 ...

  9. SDNU_ACM_ICPC_2020_Winter_Practice_4th [Reproduced](新知识点:矩阵快速幂的应用)

    Triangle 题意:木棒长度从1开始为1,2,3-的序列,问在一个序列中最少拿出多少木棒才能使剩下的木棒不能构成三角形. 题解:根据序列的特点以及若构成三角形则必须两边之和大于第三边想到斐波那契数 ...

最新文章

  1. pelee yuface 手势模型
  2. opencv7-ml之svm
  3. mysql为什么使用B+树
  4. Repeating Cipher
  5. A Hands-on Look at Using Ray Tracing in Games with UE 4.22 GDC 2019
  6. 2d访问冲突_Light | 基于环形分隔微镜阵列的高速随机访问轴向聚焦系统
  7. 渝粤教育 陕西师范大学 《证券投资学[专升本]》作业
  8. android设置错误页面,Android ViewPager设置当前项目/页面时抛出IndexOutOfBounds异常
  9. 【软件工程】用于IS规划的SWOT方法
  10. Web测试常用的链接测试工具
  11. 【经典算法】第八回:桶排序
  12. android 权限库EasyPermissions
  13. 《Redis开发与运维》笔记
  14. html pre标签样式,pre标签的基本样式设置
  15. 史上最强的融资方案商业计划书
  16. 802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
  17. 百度地图logo去掉
  18. 斯坦福ML课程——python转写(Week7—课程作业ex6_2)
  19. 跟着团子学SAP PS:项目模版搭建 CJ91/CJ92/CJ93/CN01/CN02/CN03/CN11/CN12/CN13
  20. 如何储存图片方法jpg格式png格式#ps教程#ps抠图

热门文章

  1. win32 透明窗口无边框模版
  2. 自学python需要安装什么-学习python要安装什么软件
  3. 黑白棋的设计说明(一)
  4. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于java网上心理咨询系统50fxl
  5. C/C++刁钻问题各个击破之细说sizeof .
  6. IAC工具的五个分类
  7. 2023年全国最新二级建造师精选真题及答案34
  8. 在线直播授课系统哪个好?哪个更适合做网校?
  9. dell笔记本外接显示器_笔记本就一个 hdmi 的接口,如何外接 2 个 dell 显示器?...
  10. 电脑黑屏,只有鼠标光标