2023.07.15 学习笔记

\textsf{思维训练}

eg1: 最大公约数

要求在 [l, r] 内寻找两个数 x, y, 使得 l \le \gcd(x, y) \le r

solution :
x, y 均为 \gcd(x, y) 的倍数

那么考虑 极限情况
x = \gcd(x, y), \ y = 2 \times \gcd(x ,y)

故只需考虑 2l 是否小于等于 r 即可

eg2: P9345 夕阳西下几时回

夕阳可以被视作由 n 种不同颜色组成的一副图,其中第 i 种的颜色为 a_i ,满足 a 是长度为 n 的排列。

定义一个排列的乡愁度为:

  • 对于所有 1\le i \le n ,记 b_i=\gcd(a_i,a_{i+1}) 。特别地,我们认为 a_{n+1}=a_1
  • 排列 a 的乡愁度为序列 b不同元素的个数。

求是否有一个长度为 n ,乡愁度为 k 的排列 p 。若有解,请输出任意一个排列。

对于 100\% 的数据, 1\le T\le 10^5 3\le n\le 3\times 10^51\le k\le n\sum n \le 6\times 10^5

solution :

[1, n] 任取两个数 x, y, \gcd(x, y) 最大为 [\frac{n}{2}]

{1, 2, 4, ...} {3, 6, 12, ...} {5, 10, 20, ...}

  • 我们可以使每个数挨着它的两倍, 直到 [1, k] 均被取到
  • 对于剩下 [2k + 1, n] 放在 1, 2 之间

eg3. P3566 [POI2014] KLO-Bricks

sulution :

  • 简单想到这是一个贪心。
  • 每次取当前数目最多的那个数,将它放在当前位上。
  • 如果有多个数目相同的数,那优先取最后一个数。(避免重复)
  • 那这就好做了。数目可以用堆来维护。

eg4: CF1217D Coloring Edges

solution :

  • 拓扑排序, 取出的所有边标 0

当不存在入度为 0 的点, 任取一个入度为 1 的点将其入边标1

  • dfs, 树边标 0, 返祖边标 1, 横向边任意

    图上的环一定由树边和返祖边组成

  • 给所有点编号, 从大到小的标 1, 从小到大的标 0.

eg5: CF1304D Shortest and Longest LIS

solution :

  • 首先考虑构造最短的 \operatorname{LIS}

容易发现此时答案的下界是连续相邻 < 的长度的最大值。现在我们尝试达到这个最大值。

我们可以这么构造:首先让这个排列等于 n, n - 1, ... 2, 1

然后对于一段连续的 < ,我们直接把对应的位置翻转。

这样对于任意两个位置 i < j

除非这两个位置位于一段连续的 < 对应的区间之内,

否则一定满足 a_i > a_j 。可以发现这样构造出的 \operatorname{LIS} 一定是最短的。

  • 然后我们考虑构造最长的 \operatorname{LIS}

有了上面的思考过程,这次我们只需要让这个排列初始等于 1, 2, 3 , ..., n

然后翻转所有连续的 > 对应的区间。

这样对于任意两个位置 i < j

除非这两个位置位于一段连续的 > 对应的区间之内,

否则一定满足 a_i > a_j

因此这样构造出的 \operatorname{LIS} 一定是最长的。

eg6: P7428 [THUPC2017] 母亲节的礼物

solution :

调整构造

  • 首先,将颜色编号为 0 - 3

  • 然后,找出所有不满足要求的点,加入队列。

每次从队首取一个点。如果这个点已经满足要求就不去动它,

  • 否则,将它的颜色改成所有与它直接相连的点的中最稀有的颜色。

依据容斥原理,我们可以证明,

这个颜色在周围只有 1 个或者 0 个点拥有。

  • 改完颜色后,要判断所有与之相连的点有哪个或哪些不满足要求,压入队列。

  • 队列为空时,答案就出来了。

eg7 :[AGC017B] Moderate Differences

  • 范围转化为最值

  • 枚举加号数

  • 得到等式, 两边同减若干个 C

  • 得到 LHS 值的范围

  • 查看 RHS 值在不在这个范围

eg8. [ARC113D] Sky Reflector

solution :

A_i \le G_{i,j} \le B_j

A_i\le B_j

\max(A) \le \min(B)

A 中最大值为 t

A : t ^n + (t - 1) ^ n \ \ B : (k - t +1) ^ n

ans = (t ^n + (t - 1) ^ n ) \times (k - t +1) ^ n

找原题能手 是吧