hdu 4328
2013-10-13 16:26
197 查看
题目
求颜色全为红的矩形周长和颜色全为蓝的矩形周长和颜色交替的矩形周长,输出周长最大值.
类似于hdu1505,求满足条件的最大子矩阵,在处理颜色交替时,判断条件加一个颜色比较就行了.
求颜色全为红的矩形周长和颜色全为蓝的矩形周长和颜色交替的矩形周长,输出周长最大值.
类似于hdu1505,求满足条件的最大子矩阵,在处理颜色交替时,判断条件加一个颜色比较就行了.
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int t,n,m; char s[1002][1002]; int rr[1002][1002],b[1002][1002],rb[1002][1002];//rr[i][j],以第i行,第j列为顶边的红色矩形的高,(i,j从1开始) int r[1002],l[1002]; int main() { int ca=1; scanf("%d",&t); while(t--) { memset(rr,0,sizeof(rr)); memset(b,0,sizeof(b)); memset(br,0,sizeof(br)); memset(rb,0,sizeof(rb)); memset(s,0,sizeof(s)); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",s[i]); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(s[i-1][j-1]=='R') rr[i][j]=rr[i][j-1]+1; else rr[i][j]=0; if(s[i-1][j-1]=='B') b[i][j]=b[i][j-1]+1; else b[i][j]=0; if(j==1) rb[i][j]=1; else if(j>1) { if(s[i-1][j-1]!=s[i-1][j-2]) rb[i][j]=rb[i][j-1]+1; else rb[i][j]=1; } } } int ans=0; for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { l[i]=r[i]=i; } for(int i=1;i<=n;i++) { while(b[i][j]<=b[l[i]-1][j]&&l[i]>=1&&b[i][j]>0) l[i]=l[l[i]-1]; } for(int i=n;i>=1;i--) { while(b[i][j]<=b[r[i]+1][j]&&r[i]<=n&&b[i][j]>0) r[i]=r[r[i]+1]; } for(int i=1;i<=n;i++) ans=max(ans,b[i][j]*2+(r[i]-l[i]+1)*2); } for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { l[i]=r[i]=i; } for(int i=1;i<=n;i++) { while(rr[i][j]<=rr[l[i]-1][j]&&l[i]>=1&&rr[i][j]>0) l[i]=l[l[i]-1]; } for(int i=n;i>=1;i--) { while(rr[i][j]<=rr[r[i]+1][j]&&r[i]<=n&&rr[i][j]>0) r[i]=r[r[i]+1]; } for(int i=1;i<=n;i++) ans=max(ans,rr[i][j]*2+(r[i]-l[i]+1)*2); } for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { l[i]=r[i]=i; } for(int i=1;i<=n;i++) { while(rb[i][j]<=rb[l[i]-1][j]&&l[i]>=1&&s[l[i]-1-1][j-1]!=s[l[i]-1][j-1]) l[i]=l[l[i]-1]; } for(int i=n;i>=1;i--) { while(rb[i][j]<=rb[r[i]+1][j]&&r[i]<=n&&s[r[i]+1-1][j-1]!=s[r[i]-1][j-1]) r[i]=r[r[i]+1]; } for(int i=1;i<=n;i++) ans=max(ans,rb[i][j]*2+(r[i]-l[i]+1)*2); } printf("Case #%d: %d\n",ca++,ans); } }
相关文章推荐
- C常见问题之字符串数组和字符指针数组问题
- html5-div圆角的例子
- 《深入理解计算机系统》--异常控制流
- hdu 4059
- 字符设备驱动结构与开发
- java解析xml的四种方法
- JNI_ENV_FUNCTIONS
- 简单的死锁例子
- 2013年10月13日学习:SQL通过图形化界面创建表
- soft thresholding and hard thresholding
- 在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素
- CUDA常见问题之无法在c文件中调用cu文件中定义的函数
- 2014华为校园招聘机考(10.12北京)
- Yii 在view中包含多个view
- jquery离开页面检测修改提示保存
- 程序猿应该了解的内容以及程序猿如何强迫自己学习(思考篇)
- hdu 4325
- spice图形子系统
- 内核探测工具systemtap简介(转)
- android listview item定义不同的样式布局