标签:void des 方向 include int 坐标系 推广 最大 pre
#include<cstdio> #include<algorithm> int p,q,r,ans=0; bool d[157][157][157]; char s[157][157][157]; int f[157][157][157],f1[157][157][157],f2[157][157][157],stk[157],stp=0; int min(int a,int b){return a<b?a:b;} void maxs(int&a,int b){if(a<b)a=b;} void calc(){ for(int i=1;i<=p;++i){ for(int j=1;j<=q;++j){ for(int k=1;k<=r;++k){ f[i][j][k]=(s[i][j][k]?1+min(f[i][j-1][k],min(f[i][j-1][k-1],f[i][j][k-1])):0); } } } for(int j=1;j<=q;++j){ for(int k=1;k<=r;++k){ for(int i=1;i<=p;++i){ while(stp&&f[stk[stp]][j][k]>f[i][j][k])f1[stk[stp--]][j][k]=i-1; stk[++stp]=i; } while(stp)f1[stk[stp--]][j][k]=p; for(int i=p;i;--i){ while(stp&&f[stk[stp]][j][k]>f[i][j][k])f2[stk[stp--]][j][k]=i; stk[++stp]=i; } while(stp)f2[stk[stp--]][j][k]=0; } } for(int i=1;i<=p;++i){ for(int j=1;j<=q;++j){ for(int k=1;k<=r;++k){ maxs(ans,f[i][j][k]*(f1[i][j][k]-f2[i][j][k])); } } } } int main(){ scanf("%d%d%d",&q,&p,&r); for(int i=1;i<=p;++i){ for(int j=1;j<=q;++j){ scanf("%s",s[i][j]+1); for(int k=1;k<=r;++k)s[i][j][k]=(s[i][j][k]==‘N‘?1:0); } } calc(); for(int i=1;i<=p;++i){ for(int j=1;j<=q;++j){ for(int k=1;k<=r;++k)if(!d[i][j][k]){ d[i][j][k]=d[j][i][k]=1; std::swap(s[i][j][k],s[j][i][k]); } } } std::swap(p,q); calc(); for(int i=1;i<=p;++i){ for(int j=1;j<=q;++j){ for(int k=1;k<=r;++k)if(d[i][j][k]){ d[i][j][k]=d[k][j][i]=0; std::swap(s[i][j][k],s[k][j][i]); } } } std::swap(p,r); calc(); printf("%d\n",ans*4); return 0; }
bzojj1764: [Baltic2009]monument
标签:void des 方向 include int 坐标系 推广 最大 pre
原文地址:http://www.cnblogs.com/ccz181078/p/6052982.html