传送门
对于第一个问题,直接用悬线法求出最大的子矩阵面积,然后对于每一个能得到最大面积的矩阵,我们用二分法去掉四周的空白部分来更新第二个答案。
代码:

#include<bits/stdc++.h>
#define M 1005
using namespace std;
int n,x,y,a[M][M],b[M][M],L[M][M],R[M][M],h[M][M],sum[M][M],lpos[M][M],rpos[M][M],ans1=0,ans2=0;
char s[4];
inline int calc(int x1,int y1,int x2,int y2){return sum[x2][y2]+sum[x1-1][y1-1]-sum[x2][y1-1]-sum[x1-1][y2];}
inline int solve(int x1,int y1,int x2,int y2){int l=x1,r=x2,ans=l,tmp=calc(x1,y1,x2,y2);while(l<=r){int mid=l+r>>1;if(calc(mid,y1,x2,y2)==tmp)l=mid+1,ans=mid;else r=mid-1;}x1=ans,l=x1,r=x2;while(l<=r){int mid=l+r>>1;if(calc(x1,y1,mid,y2)==tmp)r=mid-1,ans=mid;else l=mid+1;}x2=ans,l=y1,r=y2,ans=y1;while(l<=r){int mid=l+r>>1;if(calc(x1,mid,x2,y2)==tmp)l=mid+1,ans=mid;else r=mid-1;}y1=ans,l=y1,r=y2,ans=y2;while(l<=r){int mid=l+r>>1;if(calc(x1,y1,x2,mid)==tmp)r=mid-1,ans=mid;else l=mid+1;}y2=ans;return (x2-x1)*(y2-y1);
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d%d%s",&x,&y,s),s[0]=='H'?a[x+1][y+1]=1:b[x+1][y+1]=1;n=1001;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)sum[i][j]=sum[i-1][j]+sum[i][j-1]+a[i][j]-sum[i-1][j-1];for(int i=1;i<=n;++i){int ltmp=0,rtmp=n;for(int j=1;j<=n;++j){if(b[i][j])ltmp=j+1;else L[i][j]=ltmp;}for(int j=n;j;--j){if(b[i][j])rtmp=j-1;else R[i][j]=rtmp;}for(int j=1;j<=n;++j){if(b[i][j])continue;h[i][j]=h[i-1][j]+1;if(!(h[i][j]^1))lpos[i][j]=L[i][j],rpos[i][j]=R[i][j];else lpos[i][j]=max(L[i][j],lpos[i-1][j]),rpos[i][j]=min(R[i][j],rpos[i-1][j]);int tmp1=calc(i-h[i][j]+1,lpos[i][j],i,rpos[i][j]),tmp2=solve(i-h[i][j]+1,lpos[i][j],i,rpos[i][j]);if(tmp1>ans1)ans1=tmp1,ans2=tmp2;else if(tmp1==ans1)ans2=min(ans2,tmp2);}}printf("%d\n%d",ans1,ans2);return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738176.html

2018.09.29 bzoj3885: Cow Rectangles(悬线法+二分)相关推荐

  1. 【BZOJ-30391057】玉蟾宫棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 753  Solved: 444 [Submit][Status][Discuss] ...

  2. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 317  Solved: 1 ...

  3. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

  4. [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

  5. [ZJOI2007] 棋盘制作(单调栈 / DP悬线法)

    problem 洛谷链接 solution1-单调栈 很容易想到,预处理出每个点向上最大能延伸的长度,然后对每个点求一个矩阵面积. 然后思考优化,不难想到每次对一行进行求解. 每一行的所有列一起构成了 ...

  6. 【UVALive】3029 City Game(悬线法)

    题目 传送门:QWQ 分析 以前见到过差不多的这题. xhk说是单调栈水题,但我又不会单调栈,于是当时就放下了. 这么久过去了我还是不会用单调栈做这题,用的是悬线法. 非常好写 代码 #include ...

  7. 【BZOJ1057】【codevs1428】棋盘制作,悬线法

    传送门1 传送门2 思路: 比较简单的悬线法 相关资料自行百度 看一会就能明白的 反正这个就是模板题啦(敲桌) 虽然说好不发水题了,但这次发上来也就是给大家也给自己当个板子使-- 代码: #inclu ...

  8. 最大子矩阵问题悬线法 学习小结

    最近在写dp的题目 但是我这个同学又又又又生病了 学习了一下多叉树的背包问题和最大子矩阵的问题,还有攒了几道期望,先总结一下矩阵问题: 问题模型: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点 ...

  9. bzoj 1057: 棋盘制作(悬线法)

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 2311  Solved: 1146 [Submit][St ...

最新文章

  1. gradle 指定java版本_Eclipse使用gradle编译时,使用固定的jdk版本进行编译(修改gradle的jdk编译版本)...
  2. mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁
  3. xwpython aui 子窗口-wxpython中的wxaui窗口管理器
  4. eureka自我保护时间_SpringCloud Eureka自我保护机制
  5. idea代码补全_不想得手指关节炎?帮你提炼IDEA常用代码补全操作
  6. Visio 与 Access 2007 的集成应用
  7. azure云数据库_保护Azure SQL数据库免于意外删除
  8. .Net软件设计新思维
  9. GNU make 汇总
  10. HTML5+CSS+DIV 新海诚电影简介
  11. 海德汉圆光栅编码器RON786C/RON886C/RON785C/RPN886/RON285/RON287/RON275参数针脚定义
  12. 【Web Design The Missing Link】Handing Error
  13. HNB资讯里,中烟加热不燃烧有哪些牌子?
  14. Python py文件如何调用其他py文件
  15. ora-04098:触发器 无效且未通过重新验证问题解决之权限
  16. [go]根据背景色计算文本颜色
  17. C语言输出不能被3整除
  18. FPGA知识查漏补缺——为什么setup summary和hold suammay的data path延时不一致
  19. python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法
  20. 用Latex编辑数学公式

热门文章

  1. 2018年各大互联网前端面试题二(滴滴打车)
  2. cf723d Lakes in Berland
  3. Module not found: Error: Can‘t resolve ‘querystring‘ in
  4. 计算机网络学习笔记(28. Email消息格式与POP协议)
  5. boot定时任务开启和关闭 spring_Spring-Boot 下定时任务通过配置文件控制开关和执行时间...
  6. maya显示已安装_【3D建模】Maya操作秘籍83招(一)
  7. 如果有轮回,又为何一定要抹去前世记忆?
  8. 去越南旅游,2万人民币能承担几天的花销?
  9. 为什么有的老板可以一整天都待在他自己的办公室里不出来
  10. 想要创业有没有过来人能够指导一下