求调玄关
查看原帖
求调玄关
800499
suzhikz楼主2024/6/3 14:11
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<queue>
#include<vector>
#include<stdio.h>
#include<map>
#include<set>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<bitset>
using namespace std;
int n,m,t,act;
int book[10][10];
string c[15];
string ca[15];
int ti[65][100][100];
int a[100];
int main(){
	a[0]=1;
	cin>>n>>m>>t>>act;
	for(int i=1;i<=n;i++){
		cin>>c[i];
        c[i]=" "+c[i];
	}
	for(int i=0;i<act;i++){
		string s;
		cin>>s;
        ca[i]=s;
		while(ca[i].size()<=60){
			ca[i]+=s;
		}
		ca[i]=" "+ca[i]; 
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int v=c[i][j]-'0';//操作类型
			for(int k=1;k<=60;k++){
				if(ca[v][k]=='N'&&i!=1){
					ti[k][i*m-m+j][i*m-m-m+j]=1;
				}else if(ca[v][k]=='W'&&j!=1){
					ti[k][i*m-m+j][i*m-m+j-1]=1;
				}else if(ca[v][k]=='S'&&i!=n){
					ti[k][i*m-m+j][i*m+j]=1;
				}else if(ca[v][k]=='E'&&j!=m){
					ti[k][i*m-m+j][i*m-m+j+1]=1;
				}else if(ca[v][k]>='0'&&ca[v][k]<='9'){
					ti[k][0][i*m-m+j]=ca[v][k]-'0';
					ti[k][i*m-m+j][i*m-m+j]=1;
				}
			}
		}
	}
	for(int i=1;i<=60;i++)ti[i][0][0]=1;
	for(int tim=2;tim<=60;tim++){
		int c[100][100]={0};
		for(int i=0;i<=n*m;i++){
			for(int j=0;j<=n*m;j++){
				for(int k=0;k<=n*m;k++){
					c[i][j]+=ti[tim-1][i][k]*ti[tim][k][j];
				}
			}
		}
		for(int i=0;i<=n*m;i++){
			for(int j=0;j<=n*m;j++){
				ti[tim][i][j]=c[i][j];
			}
		} 
	}
   // for(int i=0;i<=n*m;i++){for(int j=0;j<=n*m;j++)cout<<ti[2][i][j]<<' ';cout<<endl;}
	int d=t/60;
	while(d){
		if(d&1){
			int c[100]={0};
			for(int j=0;j<=n*m;j++){
				for(int k=0;k<=n*m;k++){
					c[j]+=a[k]*ti[60][k][j];
				}
			}
			for(int j=0;j<=n*m;j++)a[j]=c[j];
		}
		//给ti[60]平方 
		int c[100][100]={0};
		for(int i=0;i<=n*m;i++){
			for(int j=0;j<=n*m;j++){
				for(int k=1;k<=n*m;k++){
					c[i][j]+=ti[60][i][k]*ti[60][k][j];
				}
			}
		}
		for(int i=0;i<=n*m;i++){
			for(int j=0;j<=n*m;j++){
				ti[60][i][j]=c[i][j];
			}
		} 
		d>>=1;
	}
    t=t%60;
    int c[100]={0};
	for(int j=0;j<=n*m;j++){
		for(int k=0;k<=n*m;k++){
			c[j]+=a[k]*ti[t][k][j];
		}
	}
	for(int j=0;j<=n*m;j++)a[j]=c[j];
	int maxn=0;
	for(int i=1;i<=n*m;i++){
		maxn=max(maxn,a[i]);
	}
	cout<<maxn;
	return 0;
}
2024/6/3 14:11
加载中...