1 条题解

  • 1
    @ 2024-7-27 17:28:08
    #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
    上传者