构造刷题记录


[AGC001D] Arrays and Palindrome

首先观察发现奇数的个数看起来很重要,然后手玩一会发现最多只能有两个奇数,然后再分讨构造就可以了。


[AT_hitachi2020_c] ThREE

观察到 \(3\mid a\times b\) 要求 \(a,b\) 中至少一个 3 的倍数。

发现如果两个点的距离为 3 的话他们的深度的奇偶性一定不同,所以可以以此建立二分图,如果某一部的大小小于 3 的倍数的数量就给这边全放 3 的倍数。否则就将模 3 余 1 或 2 的两类数分两边放再把 3 的倍数随便放。


[AT_hitachi2020_e] Odd Sum Rectangles

首先考虑 \(n=m\) 的情况,通过对小规模矩阵的打表我们大致可以发现答案的构造大概可以分治构造。

考虑把当前的 \(2^k-1\times2^k-1\) 的矩阵切成 4 个 \(2^{k-1}-1\times2^{k-1}-1\) 的矩阵和正中间的一个十字结构,考虑在正中间放一个 1 然后递归处理,发现这玩意结构优美得符合条件。

然后对于 \(n\neq m\) 的情况就用若干个这样的方形拼起来。


[ABC111D] Robot Arms

首先考虑有解的判定:显然你不管怎么操作,最后的奇偶性是变不了的,所以如果存在两对终点 \((x,y)\)\((a,b)\),使得 \(x+y\not\equiv a+b \pmod2\) 就无解。

然后考虑 40 步的限制,看起来就很二进制。

所以我们直接用 \(2^38\)\(2^0\),每次朝走了过后曼哈顿距离更小的方向走。


[ARC103F] Distance Sums

发现什么,\(d\) 最大的一定是叶子,最小的一定是重心。

如果从重心出发往下构建的话不太方便,也不行。

只能从叶子出发,因为考虑到一个点时已经知道了它的子树大小,所以可以根据 \(d\) 的变化算出它的父亲,然后自底向上构建整棵树。

最后 check 一下根的 \(d\) 值是不是符合的就可以了。


[AGC030C] Coloring Torus

先考虑一个大大的矩阵,然后往里面填斜线,然后我们发现这玩意填 500 就满了。

考虑把剩下的数每个找一根斜线,与原来的数交错地放。

完了。


[AGC035C] Skolem XOR Tree

首先发现 \(n=2^k\) 时最高为位只有 \(n\) 有 1,显然无法构造一条首尾都为 \(n\) 的链的异或值为 \(n\)

考虑符合条件的树长什么样子:对于 \(x\)\(x\)\(x+n\) 路径上的所有点的异或值为 \(x\),比如 \(2\to4\to6\to2+n\to4+n\to6+n\) 这样一条链。

也就是说如果我们现在有 \(x_1\oplus x_2\oplus x_3\cdots\oplus x_m=0\),我们就可以把这些点依次串起来得到一条链。或者如果有 \(x_1\oplus x_2\oplus x_3\cdots\oplus x_m=X\),我们可以构造一条 \(x_1\to x_2\to x_3\to\cdots\to x_m\to X\to x_1+n\to\cdots\to x_m+n\) 的链(前提是 \(X\) 已经被另外安排好了位置)。后面将这两种链分别简记为 \(x_1\to x_2\to x_3\to\cdots\to x_m\)\(x_1\to x_2\to x_3\to\cdots\to x_m\leadsto X\)

然后我们发现如果 \(n\) 是一个奇数,那么 \(\bigoplus\limits_{i=1}^{n}i\in\{0,1\}\)。也就是说要么可以一条链拉完,要么就先放 \(1\to2\to3\),再用 1 连接剩下的链。

然后我们发现如果 \(x\) 是一个偶数就没有如此优秀的性质了。

考虑记 \(\bigoplus\limits_{i=1}^{n}i=z\)。记 \(x\) 表示 \(z\) 除去 \(2^0\) 位后的最低位的 1 对应值。因为一开始就判掉 \(n=2^k\) 了,所以显然是能取到值的。考虑先放一条 \(2\to x\to x+2\) 或者当 \(x=2\) 时放一条 \(4\to2\to6\)。将这 3 个数记为 \(a,b,c\)

然后记 \(y=z\oplus x,u=y\oplus 1\),然后放一条 \(x+1\to y\to u\leadsto x\) 的链。

最后记剩下的 \(n-6\) 个数为 \(x_{1,n-6}\),放一条 \(x_1\to x_2\to x_3\to\cdots\to x_{n-6}\leadsto y\) 的链就完了。

考虑证明这样的正确性:

首先考虑 3 条链的合法性:我们第一步放置的 \(a\to b\to c\),显然是满足 \(a\oplus b\oplus c=0\) 的;第二步的 \(y\oplus u=1,(x+1)\oplus 1=x\) 所以有 \((x+1)\oplus y\oplus u=x\);剩下的 \(\bigoplus\limits_{i=1}^{n-6}x_i=z\oplus(a\oplus b\oplus c)\oplus((x+1)\oplus y\oplus u)=z\oplus x=y\)

再考虑证明 \(a,b,c,x+1,y,u\) 互不相同且均不超过 \(n\):首先,显然 \(a,b,c,x+1\) 互不相同以及 \(y\neq u\)。因为 \(x+1=x\oplus 1,x\oplus y=z,z\neq 0,z\neq 1,y\oplus u=1\),如果有相等可以简单地推出矛盾。

但是我们发现好像上述证明只对 \(n>6\) 有用,所以 \(n=6\) 手玩一下特判就可以了。


[AGC004C] AND Grid

抽象的题,被硬控。

因为边界没放,所以我们考虑两次分别用上边界和下边界保证联通,并分别填满奇数列和偶数列。


CF1497C2 k-LCM

被 *1600 单杀。

首先考虑 \(k=3\) 的情况,显然可以用 \(2,\dfrac{n}2-1,\dfrac{n}2-1\)\(1,\dfrac{n-1}2,\dfrac{n-1}2 (2\mid\dfrac{n-1}2)\)\(\dfrac n2,\dfrac n4,\dfrac n4\) 就可以解决了。

然后是神奇的一步,我考虑如果 \(k>3\),我们可以先放一个 1,然后问题就等同于 \(n-1,k-1\) 的情况,递归直到 \(k=3\) 即可。

posted @ 2025-01-16 14:18  Grisses  阅读(16)  评论(1)    收藏  举报
Document