1 条题解
-
1
#include <bits/stdc++.h> #define ll long long using namespace std; const int N=70; int n,m,k,t,p,act; char c[11][11]; string s[11]; int num(int i,int j){ return (i-1)*m+j; } struct node{ ll a[N][N]; node operator*(const node &b)const{ node tmp; for (int i=1;i<=p;++i) for (int j=1;j<=p;++j){ tmp.a[i][j]=0; for (int k=1;k<=p;++k) tmp.a[i][j]+=a[i][k]*b.a[k][j]; } return tmp; } }ans,a[65],A; int main() { cin>>n>>m>>t>>act; for (int i=1;i<=n;++i) cin>>c[i]+1; for (int i=0;i<act;++i) cin>>s[i]; p=n*m+1;//p 矩阵大小 for (int i=1;i<=n;++i) for (int j=1;j<=m;++j){ int x=c[i][j]-'0';//对应的操作序列 int now=0; for (int k=1;k<=60;++k) { char o=s[x][now]; now=(++now)%s[x].size(); if (o>='0'&&o<='9'){ a[k].a[p][num(i,j)]+=o-'0'; a[k].a[num(i,j)][num(i,j)]=1; } else if(o=='N'&&i>1) a[k].a[num(i,j)][num(i-1,j)]=1; else if(o=='S'&&i<n) a[k].a[num(i,j)][num(i+1,j)]=1; else if(o=='W'&&j>1) a[k].a[num(i,j)][num(i,j-1)]=1; else if(o=='E'&&j<m) a[k].a[num(i,j)][num(i,j+1)]=1; } } for (int k=1;k<=60;++k) a[k].a[p][p]=1; for (int i=2;i<=60;++i) a[i]=a[i-1]*a[i]; ans.a[1][p]=1; for (ll b=t/60;b;b>>=1){ if (b&1) ans=ans*a[60]; a[60]=a[60]*a[60]; } if (t%60) ans=ans*a[t%60]; ll mx=0; for (int i=1;i<=n*m;++i) mx=max(mx,ans.a[1][i]); cout<<mx; }
- 1
信息
- ID
- 376
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 53
- 已通过
- 21
- 上传者