记录全思路过程和正解分析。全思路过程很 navie,不过很下饭不是嘛。会持续更新的(应该)。

「CF1521E」Nastia and a Beautiful Matrix

Thought.

要把所有数容纳下就一定至少有,\(\sum \limits _{i = 1 \to k} a_i < n^2\)。但这个限制太弱了可恶。

考虑一种构造,一排全放数字,一排隔一个放一个。感觉可以做到最优。

接下来考虑普适化的细节,即需要满足对角线数组不同。

全放数字的就直接往上怼,不够换下一个数字,顺序填即可。

全放数字的不妨均为奇数行,则隔一个放一个的为偶数行,在所有奇数行确定后再填。从下往上,只有能填就填。

但我们没有确定 \(n\) ?如果一个矩阵按理想情况填满应该能装:

\[f(n) =\begin {cases}
(\frac {n + 1} {2} ) ^ 2 + \frac {n - 1} {2} \times n = \frac {3 n ^ 2 + 1} {4}, n \equiv 1 \pmod 2 \\
\\
(\frac {n} {2} ) ^ 2 + \frac {n} {2} \times n = \frac {3 n ^ 2} {4}, n \equiv 1 \pmod 2 \\
\end {cases}
\]

而需要最大容量的数字拥有方案应该是全部都是一个数,比如 \(10^5\) 个 \(1\) 啥的。

而这种情况只能一行全放,一行全空。此时一个矩阵可以装:

\[g(n) \begin {cases}
\frac {n - 1} {2} \times n = \frac {n ^ 2 - n} {2}, n \equiv 1 \pmod 2 \\
\\
\frac {n} {2} \times n = \frac {n ^ 2} {2}, n \equiv 1 \pmod 2 \\
\end {cases}
\]

如果一个 \(n\),\(s.t. g(n) \leq \sum \limits _{i = 1 \to n} a_i \leq f(n)\),则有几率可以。感觉这样的 \(n\) 没多少啊?那就枚举。

假设共 \(x\) 个数,不难发现 \(f(n)\),\(g(n)\) 对于同奇偶的 \(n, n \geq 1\) 分别单增。

那么就从 \(n = \frac {\sqrt {4x - 1}} {3}\) 开始枚举,一直到 \(n = \sqrt {2x}\)。试一下吧?

G 了。Hack 数据:

1
25 3
12 10 3

Solution.

一行填满,一行隔一个填一个的思路是对的。

但并不是按顺序能填就填,因为在这样的逻辑中,只能填下 \(n \times \lceil \frac {n} {2} \rceil\) 个同种类的数,不然就会破坏规则二。

(可使用抽屉原理证明。

而 \(n^2 - \lfloor \frac {n} {2} \rfloor^2\) 是这样填最多可以有多少个非零的数填入。

故可以得出 \(n^2 - \lfloor \frac {n} {2} \rfloor^2 \geq m\),\(n \times \lceil \frac {n} {2} \rceil \geq \max \limits _{i = 1 \to n} a_i\)。但这充分吗?

Two thousand years later...

充分。

我们考虑按以下方式构造,按从数字个数从大到小的顺序依次将对应数字填入这些格子:

  • 第一类:横坐标为奇数,纵坐标为偶数。
  • 第二类:横坐标为奇数,纵坐标为奇数。
  • 第三类:横坐标为偶数,纵坐标为奇数。

(允许最后一类不填。

那么会破坏第二个限制的就是第一类格子的数和相邻的第三类格子的数相同。

而第一类格子填入的最后一个数是第 \(\lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil\) 个填入的,第三类格子填入的第一个数是第 \(n \times \lceil \frac {n} {2} \rceil + 1\) 个填入的。

若假设会相同,那么第一类格子应全是这个相同的数 \(x\)。

因为如果不是 \(x\),则有另一个数 \(y\) (\(y\) 应比 \(x\) 后填入)跨越了第一类和第三类,\(y\) 的个数至少为 \(n \times \lceil \frac {n} {2} \rceil - \lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil + 2\) ,而 \(x\) 的数个数至多为 \(\lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil - 1\)。

因为 \(n \times \lceil \frac {n} {2} \rceil - \lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil + 2 = \lceil \frac {n} {2} \rceil \times \lfloor \frac {n} {2} \rfloor + 2\) 且 \(\lceil \frac {n} {2} \rceil \times \lfloor \frac {n} {2} \rfloor + 2 - (\lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil - 1) = \lceil \frac {n} {2} \rceil \times (1 / 0) + 3 > 0\),所以 \(n \times \lceil \frac {n} {2} \rceil - \lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil + 2 > \lceil \frac {n} {2} \rceil \times \lceil \frac {n} {2} \rceil - 1\) 。而这与按照数字个数从大到小的顺序矛盾。

故第一类应全是 \(x\),因为是按顺序且第三类的第一个也是 \(x\),那么说明这个数的个数至少为 \(n \times \lceil \frac {n} {2} \rceil + 1\),这与 \(n \times \lceil \frac {n} {2} \rceil \geq \max \limits _{i = 1 \to n} a_i\) 矛盾。

故第一类格子的数和相邻的第三类格子的数不可能相同。

哇这谁想得到。


「CF1391E」Pairs of Pairs

Thought & Solution.

难道说……子任务 \(2\) 就是找 \(\frac { \lceil \frac {n} {2} \rceil } {2}\) 对点互相没有连边?!

子任务 \(1\) 的指向极为明显,考虑在原图中跑 DFS ,按照 DFS 序,拉出一棵 DFS 树。若深度 \(\geq \lceil \frac {n} {2} \rceil\),则子任务 \(1\) 有解。

否则,完成子任务 \(2\)。易知原图中有两点 \(u, v\) 间有边为 \(u, v\) 在 DFS 中存在祖孙关系的充要条件(与有向图 Tarjan 类似。

也就是说我们要找 \(\frac { \lceil \frac {n} {2} \rceil } {2}\) 对点互相不存在祖孙关系。

容易的。可以将同一深度将相邻的点配对,最后最多剩下 \(1\) 个点。因为最大深度 \(< \lceil \frac {n} {2} \rceil\),所以剩下的点数 \(< \lceil \frac {n} {2} \rceil\) ,即配对的点数 \(> n - \lceil \frac {n} {2} \rceil = \lfloor \frac {n} {2}\rfloor\),故可知在子任务 \(1\) 无法完成时,按这种方法构造子任务 \(2\) 一定有解。

合理的,能够通过的。


「CF1592F1」Alice and Recoloring 1

Thought.

不难发现对于目标矩阵的任意全是 \(B\) 的子矩阵,若不包含 \(4\) 个角,则都可以使用至多 \(4\) 次操作 #1 单独构造出来且不影响其他子矩阵(如果贴在边缘则仅需 \(2\) 次)。

但这不好做啊,因为子矩阵可以相互用部分去组合。

然后发现 #2、#3 两种操作是废的,因为操作 #2 可以用两个操作 #1 完成,费用为 \(2\);操作 #3 也可以用两个操作 #1 完成,费用为 \(2\)。

但这仍然不好做,并不能产生构成方案的动机。开始构思一些神妙做法了。

比如我们可以单独考虑执行操作 #1 \((i, j)\),则可以同时清理整个 \(i:1 \to i, j: 1 \to j\) 里的 B……这是句废话。

好啦我不会。

Solution.

继续反直觉,从上面的思路往下走。我们考虑只使用 #1,且令 B 为 \(1\),W 为 \(0\)。

当一个位置 \((i, j)\) 需要使用 #1 变为 \(1\) 时,代表它现在的状态是 \(0\)。即存在本身是 \(0\)、处理 \((i, j + 1),(i + 1, j),(i + 1, j + 1)\) 时使用了偶数次 #1 使得 \((i, j)\) 仍为 \(0\) 两种情况。

同理考虑需要使用 #1 变为 \(0\) 的情况。

可以得出如果 \((i, j) \space \mathrm{xor} \space (i, j + 1) \space \mathrm{xor} \space (i + 1, j) \space \mathrm{xor} \space (i + 1, j + 1) = 1\),则需要执行 #1;否则就不需要。如果记一个新的矩阵 $a(i, j) = $ 前面那一坨异或和,则 #1 可以每次让一个位置翻转,多次使用使矩阵达到目的。

那么我们就可以只用 #1 构造出一个合法方案,但应该是可以继续用 #4 进行优化的。

#4 淦了个啥?将 \(a(i, j), a(i, m), a(n, j), a(m, n)\) 同时一次性翻转。对于 \(a(m, n)\),以后可能会重复受作用,所以直观上,#4 应该只用一次最赚。有谁会详细证明嘛,先留个坑。


「CF1519E」Off by One

Thought & Solution.

平推流好费脑子啊,原来内部练习都习惯乱开的。(然后难一点的都放了可恶。所以平推要尽量坚持。

判断两点是否可以执行移动并删除是很容易的。我们可以先将所有可以直接删除的点对连边,那么答案就转化为无向图的最大边独立集。

然后会发现边是 \(n ^ 2\) 级别的,并且这个边独立集也很难做,G。

对于一个点 \((x, y)\),将它与两个表示斜率 \(\frac {x + 1} {y},\frac {x} {y + 1}\) 的点相连。则原问题转化为求一个最大匹配,定义匹配形如 Node1 - SlopeSlope - Node2 的两边,注意 Slope 是可以共用的。

感觉能做啊。来整个 DFS 森林,易知叶子节点一定是 Slope 节点,而根也为 Slope 节点。

我们强制让深度小的连向深度大的,使其全部改造为有向边。则对于 Slope 点 \(u\):

让他所有连向儿子的边依次相邻匹配,如果一个不剩就回溯;如果剩一个就和父亲连向自己的边匹配。注意 Node 顶点不能重复匹配,所以匹配了的边的 Node 顶点要打上标记。

最后每棵树的根没父亲帮忙收尾,但可见这样每棵树最多只会损失一条边,也就是说我们的答案可以取 \(\sum\lfloor \frac {m} {2} \rfloor\),这一定是最大的!


「CF1567F」One-Four Overload

Thought.

如果有一个被标记的格子周围有奇数个未被标记的格子,无解。

如果一个被标记的格子周围没有未被标记的格子,则该格子填入 \(0\)。

所有周围有 \(2\) 个未被标记的格子的被标记的格子可以一起考虑,建图二分图染色即可。

那如果周围有 \(4\) 个未被标记的格子呢?考虑一种连边使得不存在奇环,这样就可以和上面一种情况融合起来解决。

对于周围有 \(4\) 个未被标记的格子 \((x, y)\),我们连接 \((x - 1, y) \to (x, y + 1), (x, y - 1) \to (x + 1, y)\)。感性理解一下所有的环都应该是绕被标记点一圈之类的,那肯定都是偶环。应该是吧?

事实证明,结论无误,但怎么证啊?(

Solution.

再次选择留个坑。


「CF1103C」Johnny Solving

Thought & Solution.

不要再做二选一子任务了要吐了。

直接 en 上 DFS 树,子任务一根据深度可解。按照套路,如果子任务一不可解则子任务二可解,并且可以据此来构造。

考虑这样一颗 DFS 树,所有的节点在原图中度大于等于 \(3\),也就说明对于任意结点一定有一条在树上可以成环的边。且这条边可以证明一定连接两个具有祖孙关系的点。

又因为任务一不可解,所以深度小于 \(\frac {n} {k}\)。只能发现每一层深度相同的点期望个数有 \(k\) 个,没有动机去构造这 \(k\) 个环啊。

!取所有的叶子节点(个数一定不小于 \(k\)),利用不在树上的边构环即可。

尝试证明细节。

首先每个叶子节点一定能构成三个及以上的环。两条返祖边分别加祖先到叶子的链,已经两个祖先之间的路径加两条返租边。

因为没有重边,不难发现一定存在一个长度大于 \(3\) 而不是 \(3\) 的倍数的环。

Solution -「构造」专练的更多相关文章

  1. Solution -「树上杂题?」专练

    主要是记录思路,不要被刚开始错误方向带偏了 www 「CF1110F」Nearest Leaf 特殊性质:先序遍历即为 \(1 \to n\),可得出:叶子节点编号递增或可在不改变树形态的基础上调整为 ...

  2. Solution -「原创」Destiny

    题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...

  3. Solution -「GLR-R2」教材运送

    \(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点,有点权和边权的树.设当前位置 \(s\)(初始时 \(s=1\)),每次在 \(n\) 个结点内 ...

  4. Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy

    \(\mathcal{Description}\)   Link.(完全一致)   给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\r ...

  5. Solution -「LOCAL」「cov. 牛客多校 2020 第三场 I」礼物

    \(\mathcal{Description}\)   给定排列 \(\{a_n\}\),求字典序第 \(K\) 大的合法排列 \(\{b_n\}\).称一个排列 \(\{p_n\}\) 合法,当且仅 ...

  6. 「ARC103D」Robot Arms「构造」

    题意 给定\(n\)个点,你需要找到一个合适的\(m\)和\(d_1,d_2,...,d_m\),使得从原点出发每次向四个方向的某一个走\(d_i\)个单位,最终到达\((x_t, y_t)\).输出 ...

  7. Solution -「WF2011」「BZOJ #3963」MachineWorks

    \(\mathcal{Description}\)   Link.   给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...

  8. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  9. Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡

    \(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...

随机推荐

  1. Pytorch Linear ()简单推导

    pytorch,nn.Linear 下图中的A是权重矩阵,b是偏置. in_features输入样本的张量大小 out_features输出样本的张量大小 bias是偏置 # 测试代码 # batch ...

  2. /proc/meminfo 解释

  3. Golang(go语言)开发环境配置

    VSCode开发环境配置 目录 VSCode开发环境配置 先到VSCode官网去下载适合自己系统的VSCode安装软件 演示在WIndows下 安装使用 演示在Linux(Ubuntu/centos) ...

  4. Git 使用心得 & 常见问题整理

    开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...

  5. RabbitMQ 3.9( 基础 )

    1.认识MQ 1.1.什么是MQ? MQ全称:message queue 即 消息队列 这个队列遵循的原则:FIFO 即 先进先出 队列里面存的就是message 1.2.为什么要用MQ? 1.2.1 ...

  6. JS 一些概念

    JS 内存机制 基本类型: String | Boolean | Undefined | Number | Nll | Symbol 数据保存在"栈"--先进后出. 数据类型: A ...

  7. Ansible的参数介绍

    安装完成ansible后查看ansible的参数:ansible -h ansible 命令格式:Usage: ansible <host-pattern> [options] ansib ...

  8. 2022年5月11日,NBMiner发布了41.3版本,在内核中加入了100%LHR解锁器,从此NVIDIA的显卡再无锁卡一说

           2022年5月11日,NBMiner发布NBMiner_41.3版本,主要提升了稳定性.         2022年5月8日,NBMiner发布NBMiner_41.0版本,在最新的内核 ...

  9. mybatis plus 的 ActiveRecord 模式

    实体类继承 Model public class Test extends Model<Test> implements Serializable {} 就可以 new Test().in ...

  10. 【算法】基数排序(Radix Sort)(十)

    基数排序(Radix Sort) 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最后的次序就 ...