以下是简要题解:

  1. 首先思考如何判定一个矩形是否能通过操作变成全黑。

  2. 首先从简单而又特殊的 \(2 \times 2\) 的矩形开始,不难发现只要其中黑色数量不为奇数即可。

  3. 近一步拓展可以发现,一个矩形合法当且仅当所有 \(2 \times 2\) 的矩形均满足黑色数量不为奇数。

  4. 充分性显然,必要性证明思路如下:显然通过任意的操作不会改变 \(2 \times 2\) 子矩形黑色数量为偶数个的性质,通过构造一定能使得第一行第一列一定为黑色,那么根据一个矩形内部黑色数量不为奇数,必定可以推出矩形全黑。

  5. 于是问题就转化成:将 \(2 \times 2\) 的偶数数量矩形缩成点标号为 \(1\),否则标号为 \(0\),求最大全 \(1\) 子矩阵的大小。

  6. 这是一个经典问题,枚举底面就可以变成一个经典的一维单调栈问题。

要注意的是,单独一行或一列不存在 \(2 \times 2\) 的子矩形但都是可以变成全黑的。

#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = l; i <= r; ++i)
#define dep(i, l, r) for (int i = r; i >= l; --i)
const int N = 2e3 + 5;
char s[N][N]; int n, m, top, ans, l[N], r[N], h[N], st[N], a[N][N];
int calc(int x, int y) {
return (s[x][y] == '#') + (s[x + 1][y] == '#') + (s[x][y + 1] == '#') + (s[x + 1][y + 1] == '#');
}
int main () {
cin >> n >> m;
rep(i, 1, n) scanf("%s", s[i] + 1);
rep(i, 1, n - 1) rep(j, 1, m - 1) if(calc(i, j) % 2 == 0) a[i][j] = 1;
--n, --m;
rep(i, 1, n) {
memset(l, 0, sizeof(l)), memset(r, 0, sizeof(r));
rep(j, 1, m) h[j] = a[i][j] * h[j] + a[i][j];
top = 0;
dep(j, 1, m) {
for (; top && h[st[top]] > h[j]; --top) l[st[top]] = j;
st[++top] = j;
}
top = 0;
rep(j, 1, m) {
for (; top && h[st[top]] > h[j]; --top) r[st[top]] = j;
st[++top] = j;
}
rep(j, 1, m) if(!r[j]) r[j] = m + 1;
rep(j, 1, m) ans = max(ans, (h[j] + 1) * (r[j] - l[j]));
}
printf("%d", max(ans, max(n + 1, m + 1)));
return 0;
}

因为题目要求最大的能被涂成全黑的矩形,最朴素的想法判定一个矩形能被涂黑是非常重要的。

直接判定是不好判定的,可以从一些小而特殊的情况开始考虑,再观察一般情况与特殊情况的联系与区别。

同时,可以观察判定的必要条件,往往通过一些必要条件的组合就能推出判定的充分条件。

AT2699 [ARC081D] Flip and Rectangles的更多相关文章

  1. [Arc081F]Flip and Rectangles

    [Arc081F]Flip and Rectangles 试题分析 首先考虑如何操作,发现我们只会选若干行和若干列来进行一次取反. 这个东西相当于什么呢?相当于交点不变,然后这些行和这些列的其它点取反 ...

  2. [Agc081F/At2699] Flip and Rectangles - 单调栈,结论

    [Agc081F/At2699] 给出一个拥有 \(H\times W\) 个格子的棋盘,每个格子的颜色为黑色或白色. Snuke 可以进行任意次下列操作: 选择棋盘中的一行或一列,将这一行或一列的颜 ...

  3. [AT2699]Flip and Rectangles

    题目大意:有一个$n\times m$的$01$矩阵,可以把任意行或列反转,问最大的全为一的子矩阵的面积 题解:有一个结论:若一个子矩形$S$中的任意一个$2\times 2$的子矩形都含有偶数个$1 ...

  4. AtCoder Regular Contest 081 F - Flip and Rectangles

    题目传送门:https://arc081.contest.atcoder.jp/tasks/arc081_d 题目大意: 给定一个\(n×m\)的棋盘,棋盘上有一些黑点和白点,每次你可以选择一行或一列 ...

  5. Atcoder 乱做

    最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到 ...

  6. 【AtCoder】ARC081

    C - Make a Rectangle 每次取两个相同的且最大的边,取两次即可 #include <bits/stdc++.h> #define fi first #define se ...

  7. AtCoder Regular Contest 081

    C - Make a Rectangle 从大到小贪心即可. # include <bits/stdc++.h> using namespace std; map<int,int&g ...

  8. AtCoder Regular Contest 81

    链接 C.Make a Rectangle 给出一堆木棍的长度 从中选4根,询问在能围成矩形的情况下,矩形的最大面积 开个map统计一下就行 分正方形和矩形分别统计即可 复杂度$O(n \log n) ...

  9. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

随机推荐

  1. SpringMVC 五大组件

    DispatcherServlet HandleMapping Controller ModeAndView ViewResolver 1.DispatcherServlet 这个控件是SpringM ...

  2. DEEP DOUBLE DESCENT: WHERE BIGGER MODELS AND MORE DATA HURT

    目录 概 主要内容 Effective Model Complexity(EMC) label noise data augmentation 下降方式 SGD vs Adam Adam SGD SG ...

  3. Momentum and NAG

    目录 Momentum Nesterov accelerated gradient NESTEROV 的另外一个方法? Momentum Momentum的迭代公式为: \[v_t = \gamma ...

  4. 解决vite+elementplus 打包后出现的下拉列表多出空元素的bug

    打包后下拉列表出现的空元素bug 之前的项目element-plus版本是 "^1.0.2-beta.70"  把他升级一下就好了 npm i element-plus@1.0.2 ...

  5. javascript实现base64格式转码与解码

    最近碰到一个需求,后端返回base64格式的数据,前端需要进行base64格式解码,好了,前端采用内部提供的atob函数进行解码,开完成,交付测试,然后测试小哥哥小姐姐反馈说中文乱码! 然后查了一下, ...

  6. docker——nginx运行起不来或者说起来了又挂了

    记得刚开始玩docker的时候,想着docker上运行一个nginx代理,于是写了个Dockerfile: FROM nginx:latest WORKDIR . COPY demo.conf /et ...

  7. Swoole 中使用异步任务

    执行异步任务 (Task) # server.php $serv = new Swoole\Server("127.0.0.1", 9501); // 设置异步任务的工作进程数量 ...

  8. 前端如何低门槛开发iOS、Android、小程序多端应用

    现如今跨平台开发技术已不是什么新鲜话题了,在市面上也有一些开源的框架可供选择,然而技术成熟.产品服务健全的平台并不多,其中也不乏推陈出新的框架值得关注. 比如最近使用的AVM,由APICloud迭代推 ...

  9. 利用 Maven 创建 Docker 镜像并且推送到私有注册中心

    利用 Maven 命令生成项目框架 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -Darchetype ...

  10. 使用yum安装php*时报错的解决办法

    # yum -y install php* 注意: php53-odbc64-5.3.3-2.el5.x86_64 from base has depsolving problems  -->  ...