1 条题解

  • 0
    @ 2025-9-10 9:05:48

    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
    上传者