LCA智慧构造_专题_LCA
JueFan 一只绝帆

LCA 智慧构造

CF1762D GCD Queries

这是一道交互题,tt 组数据。

有一个 0n10\sim n-1 的排列 pp。你可以进行以下询问最多 2n2n 次:

  • ? i j:询问 pip_ipjp_j 两个元素,交互器会返回两个元素的 gcd\gcd

询问以后,你需要给出两个下标 x,yx,y(可以相等),满足 px=0p_x=0py=0p_y=0,格式为 ! x y,如果答案正确,交互器会返回 11,否则返回 1-1

n2×104,1t104\sum n\le2\times 10^4,1\le t\le 10^4

一个思路是每次询问全局,删掉非倍数,这样第一次只要不随到 11 就可以,复杂度是等比数列求和。

但是没什么好的解决方案。

考虑 (a,x),(a,y)(a,x),(a,y),若 u=vu=v,则 a0a\ne 0,若 u<vu<v,则 x0x\ne 0,两次排掉一个数。

#538. 「LibreOJ NOIP Round #1」数列递推

给定 a0,a1,k>0a_0,a_1,k>0,递推 ai=kai1+ai2a_i=ka_{i-1}+a_{i-2},每次给定一个下标集合问下标集合里值最大的和值最小的是谁。

a0,a1107,S106|a_0|,|a_1|\le 10^7,\sum|S|\le 10^6

一些基本的观察:ai,ai+1a_i,a_{i+1} 如果同号,那么之后就单调了。

我们考虑前面异号这部分,需要满足 ai2>kai1|a_{i-2}|>k|a_{i-1}|,然后 ai=ai2kai1|a_i|=|a_{i-2}|-k|a_{i-1}|,不难看出如果要一直满足前一个不等式,后面的式子最多持续 log\log 轮。

所以我们的流程是先算 log\log 轮等它单调,再算 log\log 轮等它绝对值超越之前的绝对值。

实现上只需要算到值域爆了停即可。

fib 模意义下循环节长度是 O(p)

证明:考虑列出矩阵 A=[0111]A=\begin{bmatrix}0&1\\1&1\end{bmatrix},这个东西实质上满足 Ak=[fkfk+1fk+1fk+2]A^k=\begin{bmatrix}f_{k}&f_{k+1}\\f_{k+1}&f_{k+2}\end{bmatrix}

由于它的行列式是 1-1,我们可以得到 fkfk+2fk+12=±1f_kf_{k+2}-f_{k+1}^2=\pm 1,联立 fk+2=fk+1+fkf_{k+2}=f_{k+1}+f_{k} 之后这个方程只有一个自由元,所以只有 O(p)O(p) 种取值。

Least Annoying Constructive Problem QOJ - 5528

有一个完全图,你需要把边集重排成一个,使得每个长为 n1n-1 的子段都是一个生成树。

APIO 听过这个题,但是没补。

尝试用一种好的方式理解这个构造。

考虑把边集分块,只需考虑相邻块之间的衔接。

每块如何构造?由于我们要把边集划分,最简单的方法就是找一个边集然后每次循环移位。

由于我们要循环移位,所以不能有两条跨度相同的边,否则在旋转的过程中两边会重复,那我们采用经典的 +1,2,+3,4,+1,-2,+3,-4,\cdots,画出来长这样:

![截图](/images/构造/LCA 智慧构造_57f3aafaa141239e0c0b7e3b7cf251b7.png)

衔接也是非常容易的,每次把平行的边换成旋转后的。

这样做足以解决序列了,但是环上会出一点点问题。

nn 为奇数的时候记得每组边相邻的和跨一个的加的顺序要固定,否则环上衔接的时候对不上。

偶数的时候则修不了,但我们可以利用奇数来做。

把一个点放到中间,外面跑 (n12)\binom {n-1}2 的奇数解,然后每 n2\frac n 2 条边就插入一条中间向边上的边。

CF468A 24 Game

你有一个整数序列,包括 nn 个整数 1n1\sim n。你每次可以从其中拿出两个数 a,ba,b,将这两个数从序列中删除,并将 a+ba+baba-ba×ba\times b 放入这个序列。

经过 n1n-1 次操作后,序列中只会剩下一个数,若这个数可能为 2424,输出 YES 与构造方案,否则,输出 NO

构造题要分把握得住还是不能把握得住,后者要想方设法浪费一些解,归纳到小的情况。

显然本题可以 i(i1)i-(i-1) 得到 11,然后乘上 2424 得到 2424,所以 ii 可以归纳到 i2i-2 的情况。

发现 4,54,5 都有解,解决了。

P6892 [ICPC2014 WF] Baggage

有一无穷长的流水线 aa,初始时 i0 和 i>2n,ai=0\forall i\le0\text{ 和 } i>2n ,a_i=0否则,若 ii 为奇数,则 ai=2a_i=2;若 ii 为偶数,则 ai=1a_i=1。也就是说,ai=2a_i=2ai=1a_i=1 是交替出现的。

现需要进行若干次 如下 操作,使得 aa 中的所有 非零元素连续 的一段且所有的 11 均在 22 前面

选择两个位置 ppqq,满足 ap0,ap+10a_p\ne0,a_{p+1}\ne0aq=aq+1=0a_q=a_{q+1}=0,将 aqa_q 设为 apa_paq+1a_{q+1} 设为 ap+1a_{p+1},并且将 apa_pap+1a_{p+1} 均设为 00。输出时将此操作表示为 p to qppqq 是具体的值)。

最小化操作步数,并输出操作序列,出题人将用 Special Judge\text{Special Judge} 来评判您的答案的正确性。

n105n\le 105

经典归纳好题,但是感觉这个构造很难想。

考虑把一个合法方案在前面加上 21 后面加上 21,考虑把它变成 1122

有点困难,不妨扩大为 2121,变成 11112222

这个是能做的,原地做需要两次交换:

21212121221121122\underline{12}1\cdots21\underline{21}\\\underline{22}11\cdots2\underline{11}2

但是六次还是太多了,有一个很神秘的构造。

将空位视为 33,我们要把 332121[]2121332121[\cdots]2121 排序,变成 12331\cdots2\cdots33

332121[]2121122121[]23311221[33]2211\underline{33}2121[\cdots]2\underline{12}1\\1221\underline{21}[\cdots]2\underline{33}1\\1221[33\cdots]2211

然后等待内部完成排序后将前面的 2222 填进内部末尾的 3333,再用后面的 1111 填进前面 2222 产生的 3333

这样我们就完成了 44 次操作 nn4n\to n-4,考虑证明答案中含 nn 的项就是 nn

考虑忽略空格后 2121 这个 pair 的数量,我们的目标是消为 00,初始有 nn 个,每次显然至多减少一个。

由于 n3n\ge 333 的时候不能仅借助 3333 复原,我们需要爆搜出 3,4,5,6,73,4,5,6,7 的答案。

LOJ#540. 「LibreOJ NOIP Round #1」游戏

给定 mm,构造一个图使得三元环个数等于 mm,你需要保证点数 500\le 500

m2×106m\le 2\times1 0^6

第一反应是用若干个完全图去凑,每个完全图贡献是 (n3)\binom n 3

但是这样 i,i+1i,i+1 之间的鸿沟是 i2i^2 级别的,新的规模是 m2/3m^{2/3}

只会递归 loglog\log\log 次,其实这样就可以了。

如果想要进一步加强,我们可以用另一个点连向这些点,连 dd 的贡献是 (d2)\binom d2,减小了 gap,减小了常数。

给定 mm,构造一个图使得独立集个数等于 mm,你需要保证点数 log2m+1\le \lceil\log_2 m\rceil+1

m1018m\le 10^{18}

当然这个题无法 check,所以是一个思考实验。

考虑如果一个图的独立集个数是 xx,那么使用 cc 个点每个点向那些点连一个菊花,则新的独立集个数变为 2c1+x2^c-1+x

所以我们每次可以把独立集个数加上 2i12^i-1,枚举个数然后判断即可。

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
总字数 231.7k 访客数 访问量