uva 12265 贩卖土地
题目大意:
有一个矩阵 有些点可以取有些不能
求以每个点为右下角的子矩阵(里面点都可以取)的周长最大值
最后统计出每个周长对应矩阵的个数
思路:
单调栈
先预处理出每个点向上最多能延伸多长记为h(i,j)
然后对于每行维护一个单调栈记录每行最远可以达到的左端点和该矩形的高
该单调栈满足高单调递增
每次加入一个元素时,判断新增加的高度是否比减去的长度多
若是,就加入栈,反之不入栈
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#define ll long long
#define inf 2147483611
#define MAXN 1010
#define MOD
using namespace std;
inline int read()
{
int x=,f=;
char ch;ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int pos,top,T,n,m,ans[MAXN*],h[MAXN][MAXN];
char map[MAXN];
struct data
{
int x,y;
}s[MAXN];
int main()
{
T=read();
while(T--)
{
n=read(),m=read();
memset(h,,sizeof(h));
memset(ans,,sizeof(ans));
for(int i=;i<=n;i++)
{
scanf("%s",map+);
for(int j=;j<=m;j++)
if(map[j]=='.') h[i][j]=h[i-][j]+;
}
for(int i=;i<=n;i++)
{
memset(s,,sizeof(s));top=;
for(int j=;j<=m;j++)
{
pos=j;
while(top&&s[top].y>=h[i][j]) {pos=s[top].x;top--;}
if(!h[i][j]) continue;
if(!top||h[i][j]-s[top].y>pos-s[top].x)
{
ans[h[i][j]+j-pos+]++;
data tmp;tmp.x=pos,tmp.y=h[i][j];
s[++top]=tmp;
}
else ans[s[top].y+j-s[top].x+]++;
}
}
for(int i=;i<=n+m;i++)
{
if(ans[i]) printf("%d x %d\n",ans[i],i*);
}
}
}
uva 12265 贩卖土地的更多相关文章
- UVa 12265 贩卖土地 单调栈
题意 输入一个\(n\times m\)的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 思路 对于 每一行 每两个沼泽之 ...
- UVa 12265 - Selling Land
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva12265 贩卖土地 单调栈
输入一个n*m的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 输入包含多组测试数据,第一行输入一个正整数N,表示输入样例 ...
- UVa 12265 (单调栈) Selling Land
紫书上分析了很多很多,超详细,= ̄ω ̄= 每扫描一行可以计算一个height数组,表示从这块空地向上延伸多少块空地,而且这个数组可以逐行递推. 首先对于每一行来说维护一个单调栈,栈里放的是矩形的左上角 ...
- 紫书 例题8-19 UVa 12265 (扫描法+单调栈)
首先可以用扫描法处理出一个height数组, 来保存从当前行开始, 每一个格子可以向上延伸的最大长度. 这种"延伸"的问题用扫描法, 因为往往这个时候可以利用前一次的结果来更新当前 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- 1597: [Usaco2008 Mar]土地购买
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4023 Solved: 1470[Submit] ...
- 土地购买(bzoj 1597)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
随机推荐
- Python使用Flask框架,结合Highchart,自定义导出菜单项目及顺序
参考链接: https://www.highcharts.com.cn/docs/export-module-overview https://api.hcharts.cn/highcharts#ex ...
- 一个页面从输入URL到加载显示完成,发生了什么?
面试经典题--URL加载 一.涉及基本知识点: 1. 计算机网络 五层因特尔协议栈: 应用层(dns.http):DNS解析成IP并完成http请求发送: 传输层(tcp.udp):三次握手四次挥手模 ...
- FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖
###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...
- spring+orm框架的兼容问题
Springframework和Hibernate版本对应关系 org.springframework 3.0.x对应org.hibernate4.0.x版本 org.springframework ...
- C51 蜂鸣器 个人笔记
音调:频率 音量:高低电平占空比 有源:上面没有加号,只需高低电平即可发声 无源:上面有加号,不仅要电平,还要, 的频率 这里的有源不是指电源的"源",而是指有没有自带震荡电路,有 ...
- java实现扫二维码登录功能
哈哈哈 http://blog.sina.com.cn/s/blog_7f416edf0102vb8h.html http://blog.sina.com.cn/s/blog_7f416edf0102 ...
- Leetcode 166.分数到小数
分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: num ...
- pdf & background
pdf & background 设置 chrome pdf background error OK
- 【区间dp+组合数+数学期望】Expression
https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/I [题意] 给定n个操作数和n-1个操作符,组成一个数学式子.每次可以选择两个相 ...
- HDU4325 树状数组+离散化
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4325 Flowers Time Limit: 4000/2000 MS (Java/Others) ...