首先可以发现一个很简单的想法,因为最外层是一定不会有 \(\#\) 的,所以可以考虑让第一个网格图将每个连通块的最外层包起来,第二个网格图将就选择这个包内部的所有点即可。

但你发现这个想法是很难实现的,只能去寻找其他的做法了。

继续沿用刚刚将连通块贴着的想法,只不过我们现在都用一条横线贴着连通块。

为了保证联通,我们让两个网格图各自占据第一列和最后一列的所有点,然后将横线连到第一列和最后一列上。

但是这样还是有问题,当两个连通块上下交错一个距离时,两个网格图还是会相交,多个连通块形成这样的结构时,也不能通过选择上下底面贴着联通的办法。

但是上面这个网格图的结构给予了我们提示,能否用这种横线将这一行上的连通块串起来呢?

于此同时,为了避免横线相交的情况,最简单的方法就是让一行只有一种横线。

因为两边是同样重要的,因此需要让两边占的行数尽可能相同。

这样一来,当一个连通块占据两行时,只需要让这几行中出现不同种类的横线即可。

又因为两种横线数量相同,可以考虑直接按照奇偶分布直线。

那么就只需要考虑单占一行的连通块了。

通过上面的构造可以发现,显然会有一遍能直接将这个联通块串起来,而这个连通块的边上一定会是另一种横线,因为 \(i, i + 1\) 不同奇偶。

因此,本题的构造方法已经浮现出来了:

  • 令两个网格图分别为 \(A, B\),将第一列分配给 \(A\),最后一列分配给 \(B\),其中对于任意一行 \(i = 2k + 1\) 将 \((i, 2) \sim (i, m - 1)\) 分配给 \(A\),对于 \(i = 2k\) 将 \((i, 2) \sim (i, m - 1)\) 分配给 \(B\)。

时间复杂度 \(O(nm)\)。

#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = l; i <= r; ++i)
const int N = 500 + 5;
int n, m;
char s[N][N], a[N][N], b[N][N];
int read() {
char c; int x = 0, f = 1;
c = getchar();
while (c > '9' || c < '0') { if(c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int main() {
n = read(), m = read();
rep(i, 1, n) rep(j, 1, m) a[i][j] = b[i][j] = '.';
rep(i, 1, n) {
scanf("%s", s[i] + 1);
rep(j, 1, m) if(s[i][j] == '#') a[i][j] = b[i][j] = '#';
}
rep(i, 1, n) a[i][1] = '#', b[i][m] = '#';
rep(i, 1, n) {
if(i & 1) rep(j, 1, m - 1) a[i][j] = '#';
else rep(j, 2, m) b[i][j] = '#';
}
rep(i, 1, n) {
rep(j, 1, m) printf("%c", a[i][j]);
puts("");
}
puts("");
rep(i, 1, n) {
rep(j, 1, m) printf("%c", b[i][j]);
puts("");
}
return 0;
}

可以发现,本题的构造从难以实现的想法出发,一步步简化到达了一个非常简单并且优秀的做法。

因此,当构造时出现实现困难的问题时,尽量简化流程方法本质不变的情况下往往能找到非常简单的构造方法。

AT2043 [AGC004C] AND Grid的更多相关文章

  1. [AGC004C] AND Grid [构造]

    题面: 传送门 思路: 一眼看上去是一道很迷的题目......直到我发现,红蓝色涂色的过程是互相独立的 而且最外围没有紫色 那么可以这样操作: 最左边一列全部红色,最右边一列全蓝 然后中间的一行红一行 ...

  2. [agc004c]and grid

    别问我为什么咕了两天 题意: 给出一个$H\times W$的网格图A,仅由'.'和'#'构成,边界上没有'#'且至少有一个'#'.构造两个网格图B和C,大小均为$H\times W$,要求A中为'# ...

  3. NOIp2018模拟赛四十四

    加量不加价?! 昨晚看时间变成了3.5h以为终于变成了正常难度,结果还是国家集训队作业... A题看起来很神仙,B题看上去很神仙,C题一看就知道很神仙: 结果发现B是假题,放榜后发现A也是假题,C是Y ...

  4. AtCoder刷题记录

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

  5. 【题解】AT2043 AND Grid

    [题解]AT2043 AND Grid 我们考虑直接构造两个互补的图切分别联通的图,然后原图有的大家都有就构造完成了. #include<iostream> #include<cst ...

  6. 【agc004C】AND Grid

    Portal --> agc004C Description 给你一个\(n*m\)的网格图\(A\),有一些格子是'#',现在要构造出两个新的网格图\(B\)和\(C\)满足: 1.如果\(A ...

  7. AT2043 AND Grid 构造

    正解:构造 解题报告: 传送门传送门! 这题psj讲了俩做法,一个是最常见的解法,还一种还不知道484对的QAQ 然后先把psj讲的不知正确性的做法港下QwQ 大概就是说,第一个图,先把底给染完 然后 ...

  8. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  9. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

随机推荐

  1. 第四十七个知识点:什么是Fiat-Shamir变换?

    第四十七个知识点:什么是Fiat-Shamir变换? 只要Alice和Bob同时在线,Sigma协议能快速的完成Alice向Bob证明的任务.Alice向Bob发送承诺,Bob返回一个挑战,最后Ali ...

  2. 第四个知识点 P类复杂问题

    第四个知识点 P类复杂问题 原文地址:http://bristolcrypto.blogspot.com/2014/10/52-things-number-4-complexity-class-p.h ...

  3. 「Codeforces 724F」Uniformly Branched Trees

    题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...

  4. 一图搞懂Web应用的单点登录

    单点登录即Signle Sign On,简称SSO.其解决的是用户在多个站点之间跳转时需要频繁登录的问题,比如用户登录了天猫,就应该无需再使用账号登录淘宝,它们之间是可以相互信任的,应该自动同步登录状 ...

  5. python极简教程01:基础变量

    测试奇谭,BUG不见. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的教程,他们同大多数自学编程语言的人一样,无外乎遇到以下这些问题: 网络上的资料过多且良莠不全,不知道如 ...

  6. [linux]ubuntu18.04 屏幕分辨率不适应问题

    今天换了新显示器,发现更大的屏幕不适应原有的屏幕分辨率,看起来特别变扭. 在设置处查看最高分辨率仅为1024*748,没有与屏幕相适应的1920*1080(16:9). 解决方式: 1. 终端输入命令 ...

  7. CS5211芯片|EDP to LVDS|CS5211应用方案

    CS5211芯片–EDP to LVDSDisplayPort到LVDS转换器双通道DP输入,双链路LVDS输出CS5211是一个显示端口到LVDS转换器设计的PC机,利用GPU和显示端口(DP) 或 ...

  8. 【jvm】08-垃圾回收器那么多傻傻分不清?

    [jvm]08-垃圾回收器那么多傻傻分不清? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺手点 ...

  9. Java Web程序设计笔记 • 【第3章 JSP内置对象】

    全部章节   >>>> 本章目录 3.1 JSP 内置对象简介 3.1.1 JSP 内置对象概述 3.1.2 JSP 表单处理 3.1.2 request对象 3.1.2 开发 ...

  10. 每天学一点——python注释规范

    python注释规范 python注释语法 这个是注释 注释是不影响代码运行的 当然注释也是有书写规范的,就像图片中的 注释前面#加空格再加上这条代码的注释(单行注释用#) 不然你会得到下面的结果 * ...