1 条题解
-
0
C++ :
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #define N 210 using namespace std; char w[N*N][N]; char A[N][N][N],B[N][N][N]; int p,q,r,t,Ans=0; int bianc[N][N][N]; int Q[N],f[N]; inline void Checking(){ memset(bianc,0,sizeof(bianc)); for(int k=1;k<=r;k++) for(int i=1;i<=p;i++) for(int j=1;j<=q;j++) if(A[i][j][k]=='N') bianc[i][j][k]=min(min(bianc[i][j-1][k],bianc[i-1][j][k]),bianc[i-1][j-1][k])+1; for(int i=1;i<=p;i++) for(int j=1;j<=q;j++){ Q[t=0]=0; bianc[i][j][0]=-1; for(int k=1;k<=r;k++){ while(t&&bianc[i][j][k]<=bianc[i][j][Q[t]]) t--; if(A[i][j][k]=='N') f[k]=k-Q[t]; else f[k]=0; Q[++t]=k; } Q[t=0]=r+1; bianc[i][j][r+1]=-1; for(int k=r;k;k--){ while(t&&bianc[i][j][k]<=bianc[i][j][Q[t]]) t--; if(A[i][j][k]=='N') f[k]+=Q[t]-k; Q[++t]=k; } for(int k=1;k<=r;k++) Ans=max(Ans,4*bianc[i][j][k]*(f[k]-1)); } } inline void Changing(){ for(int i=1;i<=p;i++) for(int j=1;j<=q;j++) for(int k=1;k<=r;k++) B[j][k][i]=A[i][j][k]; int k=p; p=q; q=r; r=k; for(int i=1;i<=p;i++) for(int j=1;j<=q;j++) for(int k=1;k<=r;k++) A[i][j][k]=B[i][j][k]; } int main(){ scanf("%d%d%d",&p,&q,&r); for(int i=1;i<=p*q;i++) scanf("%s",w[i]+1); for(int i=1;i<=p;i++) for(int j=1;j<=q;j++) for(int k=1;k<=r;k++) A[i][j][k]=w[j*p+i-p][k]; Checking(); Changing(); Checking(); Changing(); Checking(); printf("%d\n",Ans); return 0; }
- 1
信息
- ID
- 3738
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者