Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet
一个地图上有若干障碍,问允许出现一个障碍的最大子矩形为多大?
最大子矩形改编
#include<bits/stdc++.h>
using namespace std;
#define rep(i, j, k) for (int i = int(j); i <= int(k); ++ i)
#define dwn(i, j, k) for (int i = int(j); i >= int(k); -- i)
const int N = ;
int n, m, l[N][], r[N][], h[N][];
char s[N][N]; int main() {
scanf("%d%d", &n, &m);
rep(i, , n) scanf("%s", s[i] + );
int ans = ;
// 枚举障碍不在悬线上
// l[j][0]表示最左扩展(不能包含障碍),l[j][1]表示最右扩展(能包含障碍)
rep(j, , m) l[j][] = l[j][] = j, r[j][] = r[j][] = m + - j;
rep(i, , n) {
int lb0 = , lb1 = ;
rep(j, , m) {
if (s[i][j] == '.') {
h[j][] ++; ans = max(ans, h[j][]);
l[j][] = max(min(l[j][], j - lb0), min(l[j][], j - lb1));
l[j][] = min(l[j][], j - lb0);
}
else {
lb1 = lb0;
lb0 = j;
l[j][] = l[j][] = j;
h[j][] = ;
}
}
int rb0 = m + , rb1 = m + ;
dwn(j, m, ) {
if (s[i][j] == '.') {
r[j][] = max(min(r[j][], rb0 - j), min(r[j][], rb1 - j));
r[j][] = min(r[j][], rb0 - j);
ans = max(ans, (l[j][] + r[j][] - ) * h[j][]);
ans = max(ans, (l[j][] + r[j][] - ) * h[j][]);
ans = max(ans, (l[j][] + r[j][] - ) * h[j][]);
}
else {
rb1 = rb0;
rb0 = j;
r[j][] = r[j][] = m + - j;
}
}
}
// 枚举障碍在悬线上
// 这时候的l[j][0]表示没有障碍的悬线最左扩展,l[j][1]表示有障碍的悬线最左扩展
rep(j, , m) l[j][] = l[j][] = j, r[j][] = r[j][] = m + - j, h[j][] = h[j][] = ;
rep(i, , n) {
int lb = ;
rep(j, , m) {
if (s[i][j] == '.') {
h[j][] ++; h[j][] ++;
l[j][] = min(l[j][], j - lb);
l[j][] = min(l[j][], j - lb);
}
else {
l[j][] = min(l[j][], j - lb);
h[j][] = h[j][] + ; h[j][] = ;
l[j][] = j;
lb = j;
}
}
int rb = m + ;
dwn(j, m, ) {
if (s[i][j] == '.') {
r[j][] = min(r[j][], rb - j);
r[j][] = min(r[j][], rb - j);
}
else {
r[j][] = min(r[j][], rb - j);
r[j][] = m + - j;
rb = j;
}
}
rep(j, , m) {
ans = max(ans, h[j][] * (l[j][] + r[j][] - ));
}
}
cout << ans << '\n';
}
/*
4 5
#.#..
....#
..#..
....#
*/
Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet的更多相关文章
- Petrozavodsk Winter Camp, Day 8, 2014, Ship
$dp(i,j)$表示i-j这段还没运走时的状态,包括 运输了多少次,还剩多少空间 每次枚举运输左边还是右边转移 #include <bits/stdc++.h> #define rep( ...
- Petrozavodsk Winter Camp, Day 8, 2014, Fine Brochures
1的个数-块的个数+多减的个数+flag 多减的只会在一个循环末尾出现 #include <bits/stdc++.h> using namespace std; #define rep( ...
- Petrozavodsk Winter Camp, Day 8, 2014, Second Trip
给你一棵树,每次询问一个(a,b),问有多少有路径与a-b没有交集 找lca #include <bits/stdc++.h> using namespace std; #define r ...
- Petrozavodsk Winter Camp, Day 8, 2014, Mosaic
给你三个数字a,b,c,让你用1-m的数字凑出来 结论:有2个1和2个2肯定凑不出来,然后就搜索 #include <bits/stdc++.h> using namespace std; ...
- Petrozavodsk Winter Camp, Day 8, 2014, Rectangle Count
给一个n*m的格点图,问其中有多少个矩形? $ \sum_{x=1}^{nm} \sum_{ab=x} [a + b \leq n](n - a - b + 1)\sum_{cd=x} [c + d ...
- Petrozavodsk Winter Camp, Andrew, 2014, Dichromatic Trees
条件: 1:每个红色节点的儿子都是黑色节点 2.每个叶子到根路径上的黑点数相等,等于某个常数,称作树的black height 求给定black height和节点数的符合条件的方案数 $black_ ...
- Petrozavodsk Winter Camp, Andrew, 2014, Bipartite Bicolored Graphs
由i个点和j个点组成的二分图个数为 $3^{ij}$,减去不联通的部分得到得到由i,j个点组成的联通二分图个数 $g_{i,j} = 3_{ij} - \sum_{k=1}^i \sum_{l=0}^ ...
- 2018 Petrozavodsk Winter Camp, Yandex Cup
A. Ability Draft solved by RDC 60min start, 148 min AC, 1Y 题意:两只 Dota 队伍,每队 \(n\) 个英雄,英雄一开始无技能,他们需要按 ...
- 2019 Petrozavodsk Winter Camp, Yandex Cup C. Diverse Singing 上下界网络流
建图一共建四层 第一层为N个歌手 第二层为{pi,li} 第三层为{si,li} 第四层为M首歌 除了S和第一层与第三层与T之间的边为[1,INF] 其他边均为[0,1] #include<bi ...
随机推荐
- 爬取豆瓣电影影评,生成wordcloud词云,并利用监督学习根据评论自动打星
本文的完整源码在git位置:https://github.com/OceanBBBBbb/douban-ml 爬取豆瓣影评 爬豆瓣的影评比较简单,豆瓣没有做限制,甚至你都不用登陆就可以看全部,我这里用 ...
- 网络-02-端口号-linux端口详解大全
端口详解 1 tcpmux TCP Port Service Multiplexer 传输控制协议端口服务多路开关选择器 2 compressnet Management Utility compr ...
- 如何提高单片机C语言代码效率
代码效率包括两个方面内容:代码的大小和代码执行速度.如果代码精简和执行速度快,我们就说这个代码效率高.一般情况下,代码精简了速度也相应提上来了.单片机的ROM和RAM的空间都很有限,当您编程时遇到单片 ...
- C博客作业04--数组
1. 本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 这几周学习了数组,一维数组,二维数组,字符数组,前一个题集还没做完,后一个题集就又发布了,当场去世,可 ...
- 为什么做java开发的公司需要那么多程序员?
注:文章转载自知乎 透过现象看本质. Java是企业应用市场的王者,如果一家非互联网公司用Java,那么十有八九是做企业应用的. 所以,这个问题本质上是:为什么做企业应用的公司需要那么多Java程序员 ...
- Java基础总结3
计算只做加法计算 减法也是加法计算出来的: 1,顺序结构: 按照编写代码的顺序从上而下逐行翻译执行: 特点:每行代码都能被执行到且被执行一次: 2,选择结构看条件: 条件为true(成立)执行代码块: ...
- 使用laraval框架和前端完成restful风格的请求对接(这里只是讨论restful的概念)
现在,在开发中restful风格的api是比较流行的,尤其是在前后端分离的架构中. 这些东西这一下这篇文章中说的很详细:RESTful接口设计原则和优点 下面,我们来讨论如何使用laraval和前端完 ...
- 系统开机时提示BOOTMGR is compressed
问题描述: 开机时提示 BOOTMGR is compressed Press Ctrl+Alt+Del to restart 操作方法: 1.插入带有U盘启动的U盘2.进入winpe系统后,打开“ ...
- 翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings
翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings 叶娜老师说:"读懂论文的 ...
- JavaScript中对象和数组的深拷贝
不管是在面试中还是我们的项目中经常会用到数组或者对象的深拷贝,下面我就自己总结的分享给大家. 首先要知道什么是深拷贝?什么是浅拷贝? 深拷贝:源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另 ...