P4147 玉蟾宫

悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点。然后面积就很好办了。具体实现见代码。

然而,还有更优秀的算法,可是我还没学会嘤嘤嘤,可以看看这题:P1578 奶牛浴场

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int a[N][N],l[N][N],r[N][N],n,m,mp[N][N],ans;
int rd()
{
#define gc() getchar()
char c=gc();
while(c!='R'&&c!='F')c=gc();
return c=='F'?1:0;
}
int max(const int &a,const int &b){return a>b?a:b;}
int min(const int &a,const int &b){return a<b?a:b;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
mp[i][j]=rd(),l[i][j]=r[i][j]=j,a[i][j]=1;
for(int i=1;i<=n;++i)
for(int j=2;j<=m;++j)
if(mp[i][j]&&mp[i][j-1])
l[i][j]=l[i][j-1];
for(int i=1;i<=n;++i)
for(int j=m-1;j>=1;--j)
if(mp[i][j]&&mp[i][j+1])
r[i][j]=r[i][j+1];
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(i>1&&mp[i][j]&&mp[i-1][j])
{
a[i][j]=a[i-1][j]+1;
l[i][j]=max(l[i][j],l[i-1][j]);
r[i][j]=min(r[i][j],r[i-1][j]);
}
ans=max(ans,(r[i][j]-l[i][j]+1)*a[i][j]);
}
}
printf("%d\n",ans*3);
return 0;
}

最新文章

  1. obj转json
  2. flask 使用 SQLAlchemy 的两种方式
  3. 软工实践练习——使用git进行代码管理心得
  4. 华为2013校招之哈工大威海 上机试题之一:报数问题:设有N 个人围坐一圈并按顺时针方向从1 到N 编号,从第S个人开始进行1 到M报数,报 数到第 M个人时,此人出圈,再从他的下一个人重新开始1 到 M的报数,如此进行下去直 到所有的人都出圈为止。现要打印出出圈次序。
  5. Android开发之权限列表
  6. Codeforces Round #239 (Div. 2) C. Triangle
  7. 推送消息实现icon角标的动态显示
  8. Eclipse 项目有红感叹号、小红叉
  9. lc面试准备:Power of Two
  10. (二)CSS3应用 - 实现圆角
  11. 13.hibernate的native sql查询(转自xiaoluo501395377)
  12. C#创建datatable (转)
  13. flex 布局 实现电商网页菜单的多级分类展示
  14. SQL 的约束
  15. linux: 安装jdk(java)
  16. hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法
  17. 【文文殿下】 [SDOI2013]保护出题人 题解
  18. Git-根据tag创建分支
  19. 浏览器根对象window之事件
  20. PowerDesigner中翻转生成PDM图时把Name属性变成注释(转)

热门文章

  1. 一个Java的小问题
  2. eclipse如何把多个项目放在文件夹下,用文件夹分开不同的项目
  3. FTPClient下载文件,程序假死问题
  4. 扩展中国剩余定理 (ExCRT)
  5. Unity初识项目结构与面板
  6. C# 篇基础知识3——面向对象编程
  7. php 键值数组搜索查询
  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:清除浮动1
  9. 2-10 就业课(2.0)-oozie:8、定时任务的执行
  10. GoJS实例4