Description

给一个p*q*r的立方体,它由p*q*r个1*1*1的小立方体构成。每个立方体要么被虫蛀,要么不被。现在郑爽要选出一个a*a*b的立方体(方向任意),使得它没有被虫蛀过,并且4*a*b最大。

Input

第一行是p,q,r <= 150。 以下p*q行,每行r个字符。(x,y,z)这个格子,出现在输入的第1 + (y * p + x - p)行的第z个字符。 N代表未被虫蛀,P代表被虫蛀了。

Output

仅一行,代表郑爽需要的最大的4ab
将悬线扫描法推广至三维,同一层内记录以每个格子为左上角的最大全N正方形的边长a,另外记录以这个正方形边长,向前/后能延伸到的位置(相差b)。
由于方向任意,翻转坐标系计算三次可得到答案。
#include<cstdio>
#include<algorithm>
int p,q,r,ans=;
bool d[][][];
char s[][][];
int f[][][],f1[][][],f2[][][],stk[],stp=;
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=;i<=p;++i){
for(int j=;j<=q;++j){
for(int k=;k<=r;++k){
f[i][j][k]=(s[i][j][k]?+min(f[i][j-][k],min(f[i][j-][k-],f[i][j][k-])):);
}
}
}
for(int j=;j<=q;++j){
for(int k=;k<=r;++k){
for(int i=;i<=p;++i){
while(stp&&f[stk[stp]][j][k]>f[i][j][k])f1[stk[stp--]][j][k]=i-;
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]=;
}
}
for(int i=;i<=p;++i){
for(int j=;j<=q;++j){
for(int k=;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=;i<=p;++i){
for(int j=;j<=q;++j){
scanf("%s",s[i][j]+);
for(int k=;k<=r;++k)s[i][j][k]=(s[i][j][k]=='N'?:);
}
}
calc();
for(int i=;i<=p;++i){
for(int j=;j<=q;++j){
for(int k=;k<=r;++k)if(!d[i][j][k]){
d[i][j][k]=d[j][i][k]=;
std::swap(s[i][j][k],s[j][i][k]);
}
}
}
std::swap(p,q);
calc();
for(int i=;i<=p;++i){
for(int j=;j<=q;++j){
for(int k=;k<=r;++k)if(d[i][j][k]){
d[i][j][k]=d[k][j][i]=;
std::swap(s[i][j][k],s[k][j][i]);
}
}
}
std::swap(p,r);
calc();
printf("%d\n",ans*);
return ;
}

bzojj1764: [Baltic2009]monument的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. bzoj1355: [Baltic2009]Radio Transmission

    将原串看成是循环节的后缀加上若干个循环节,那么考虑每种情况都会发现n-next[n]就是最小循环节.(一开始总输出n...然后发现build_next连调用都没有,%%% #include<cs ...

  3. bzoj 1761: [Baltic2009]beetle 区间dp

    1761: [Baltic2009]beetle Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 255  Solved: 92[Submit][Statu ...

  4. BZOJ 1355: [Baltic2009]Radio Transmission( kmp )

    自己YY一下可以发现answer =  n - fail[ n ] ------------------------------------------------------------------ ...

  5. BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]

    1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 792  Solved: 535 ...

  6. [Baltic2009]Radio Transmission

    bzoj 1355: [Baltic2009]Radio Transmission http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time ...

  7. 1355: [Baltic2009]Radio Transmission[循环节]

    1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 796  Solved: 538 ...

  8. BZOJ 1355: [Baltic2009]Radio Transmission

    Description 一个字符串最短周期. Sol KMP. 最短周期就是 \(n-next[n]\) 证明: 当该字符串不存在周期的时候 \(next[n]=0\) 成立. 当存在周期的时候 \( ...

  9. bzoj1760 [Baltic2009]Triangulation

    给定一个多边形的三角剖分(n<=1e5),且每个三角形有其颜色,问最多可以把这个三角剖分分成几个联通的部分,使任何一种颜色不出现在多个连通块中 建出三角剖分对应的树,同种颜色的点之间的路径是不能 ...

随机推荐

  1. Core Java Volume I — 1.2. The Java "White Paper" Buzzwords

    1.2. The Java "White Paper" BuzzwordsThe authors of Java have written an influential White ...

  2. eclipse关联源码 Failed to create the part's controls

    在eclipse中关联源码时: 1.出现Failed to create the part's controls错误, 2.而attach source 这个按钮却没有出现. 问题原由:eclipse ...

  3. 动态数组 - ArrayList

    前言 如果数组的大小要随时间变化,那么数组操作起来就比较麻烦. 在C++中,这种情况要用到动态向量Vector. 而Java中,提供了一种叫做ArrayList的泛型数组结构类型,提供相似的作用. 其 ...

  4. Java BigInteger(大数,ACM比赛专用)

    用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...

  5. 阿里云2003服务器VPN搭建[转自阿里云官方论坛]

    VPN可以应用在很多方面,很多公司只是拿它接入公司内部网络,但我们做安全的需要的是利用它做跳板上网(还有提高网速).这篇文章主要是针对这种应用来说的,包括公网VPN的配置. 服务器配置 前奏:关闭防火 ...

  6. 让超链接点击后不跳转,可以用href = "#",但是这个#就会锚点到页面最上边 点击链接后不跳转可以设置成

    让超链接点击后不跳转,可以用href = "#",但是这个#就会锚点到页面最上边     点击链接后不跳转可以设置成     1.<a href="javascri ...

  7. Letter Combinations of a Phone Number

    Given a digit string, return all possible letter combinations that the number could represent. A map ...

  8. codefoces round193a

    link: http://codeforces.com/contest/332/problem/A /* ID: zypz4571 LANG: C++ TASK: 193a.cpp */ #inclu ...

  9. codeforces 192a

    link: http://codeforces.com/contest/330/problem/A brute force. /* ID: zypz4571 LANG: C++ TASK: 191a. ...

  10. my Highcharts

    1. a=a || {};  意义:如果a具有真值(不是undefined,null,NAN,false,0中的任意一种),则这个a可以被使用,否则将a定义为一个空的object对象{} 2. a | ...