题目:权限题!
写了一下,但提交不了,先放着吧。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,num[][],ct,w[],q,r,T;
char c[][];
struct Matrix{
int a[][];
Matrix operator * (const Matrix &y) const
{
Matrix x;
memset(x.a,,sizeof x.a);
for(int i=;i<=ct;i++)
for(int k=;k<=ct;k++)
for(int j=;j<=ct;j++)
x.a[i][j]+=a[i][k]*y.a[k][j];
return x;
}
}s[],ans,ss,ss2;
void init()
{
ans.a[][]=;//ans使用第一行
for(int t=;t<=;t++)
{
s[t].a[][]=;//!
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
int k=num[i][j];
char cc=c[k][w[k]];
if(cc>=''&&cc<='')s[t].a[][k]=cc-'';
if(cc=='N'&&i>)s[t].a[k][num[i-][j]]=;
if(cc=='W'&&j>)s[t].a[k][num[i][j-]]=;
if(cc=='S'&&i<n)s[t].a[k][num[i+][j]]=;
if(cc=='E'&&j<m)s[t].a[k][num[i][j+]]=;
if(w[k]==strlen(c[k])-)w[k]=;
else w[k]++;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&T);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
num[i][j]=++ct;
cin>>c[ct];
}
init();
q=T/;r=T%;
if(q)
{
for(int i=;i<=ct;i++)ss.a[i][i]=;
for(int i=;i<=;i++)
ss=ss*s[i];
}
if(r)
{
for(int i=;i<=ct;i++)ss2.a[i][i]=;
for(int i=;i<=r;i++)
ss2=ss2*s[i];
}
ans=ans*ss;
ans=ans*ss2;
int mx=;
for(int i=;i<=ct;i++)
mx=max(mx,ans.a[][i]);
printf("%d",mx);
return ;
}