寒假训练记录(一)

贪心

最优化的通用套路,调整法。

邻项交换、邻项合并、反悔贪心、模拟费用流。

邻项交换的正确性来源于,你的序是一个全序。

还有一种题调整是一个形如二维偏序的形式,这样可以考虑其对偶,一条折线划分成两部分。如 QOJ9222。

构造

常用方法:

  • 进行一些问题转化然后使用构造性的算法来解决。
  • 增量。
  • 构造或者直接随机一个基本解,在其基础上调整。
  • 构造一个基本操作。
  • 组合 Pattern。

CF862C

  1. 直接随机 \(n-1\) 个数,然后判断能不能通过最后一个数调整。
  2. 随便选 \(n-2\) 个数,然后找出两个数调整一下,可以证明一定可以。
  3. 熟知 \(4k,4k+1,4k+2,4k+3\) 的异或和为 \(0\),于是直接增量。

CF468B

观察一下:若存在 \(x,y\in S,x+y=a\),那么 \(x,y\) 必须属于同一个集合。\(b\) 同理。

那么连一下边,变成若干个连通块。对每个连通块判一下能不能属于 \(A\) 或者 \(B\) 就行了。

也可以直接 2-SAT。

P7115

对每个颜色分别整理肯定没前途。考虑 \(n=2\) 咋做。

对每个柱子分别做。在剩下两个柱子上给他桶排一下,这样能在 \(O(m)\) 次操作内做掉。

直接分治即可在 \(O(nm\log n)\) 次操作内做掉。

P6892

首先显然操作次数下界是 \(n\)。如何构造?考虑每次把首尾两端整理好一部分,然后递归构造即可。

zig-zag Pattern

考虑这样一个图:

\[0\to 1\to -1\to 2\to -2\to 3\to \cdots \]

这样每一步之前走过的点都是一个区间,而且距离为 \(1,2,3,4,\cdots\)。非常优美。

例题 P9837,直接建模成上面这个数轴就行了。

定义一个图的边集的 \(k\) 旋转为:每条边 \((u,v)\) 变为 \((u+k,v+k)\),模意义下的。

现在,找出一个图,使得其的 \(0,1,2,\cdots,n-1\) 旋转,这些图的边集不重复,且并起来是一个有向完全图。

模拟赛

11.6

T1

给定一个长为 \(n-1\) 的数列,建一张图,对于所有 \(1\leq i<n\)\(i\) 可以到达 \([i+1,a_i]\) 的点。问所有点对最短距离之和。

\(n\leq 10^5\)

\(f_i\) 表示从 \(i\) 出发的最短距离之和。考虑从右往左挨个计算 \(f_i\),发现可以转移。

T2

给定 \(n\),有一个 \(n\times n\times n\) 的立方体。如果在一个位置放置一个监控,那么它可以监控其前后左右上下六个方向的所有格子。

构造一种放置监控的方案,满足每个格子都被监控到,且监控个数不多于 \(\lfloor\frac{n^2}{2}\rfloor\)

考虑把整个立方体切成八个部分,用 \((\frac{n}{2})^2\) 个点覆盖四个部分。发现直接对于 \(n\) 个平面放排列的 \(n\) 次循环即可。

T3

T4

一个内向基环树,每个点有点权 \(a_i\),设 \(i\) 连向的点为 \(p_i\)。每个时刻,对于每个 \(i\),同时发生以下事件:若 \(a_{p_i}\geq a_i\),则 \(a_i\) 自增 \(1\)

\(q\) 次询问,问你在 \(d\) 时刻 \(a_k\) 的值。

\(n,q,k,d\leq 2\times 10^5\)

首先考虑一个根向树怎么做。可以直接在 dfs 的过程中线段树维护。

考虑有环。注意到环上的最小值一定是一直自增,直接断开即可。

T5

给定 \(n,k\),问 \(\{1,2,3,\cdots,n\}\) 的子集族有多少个子集满足每个数出现至少 \(k\) 次。

\(n\leq 3500,0\leq k\leq 2\)

分类讨论,对于 \(k=0\),答案显然为 \(2^{(2^n)}\)

对于 \(k=1\),容斥钦定 \(i\) 个数一定不出现,则答案为:

\[\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})} \]

对于 \(k=2\),容斥钦定 \(i\) 个数一定出现 \(0\) 次或 \(1\) 次,然后在这 \(i\) 个数里面枚举 \(j\) 个出现 \(1\) 次,剩下 \(i-j\) 个不出现。然后枚举 \(t\) 表示 \(j\) 个只出现 \(1\) 次的数被划分为几个集合,可以得到:

\[\begin{aligned} &\quad\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{j=0}^i\binom{i}{j}\sum_{t=0}^j{j\brace t}(2^{n-i})^t\\ &=\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{j=0}^i\binom{i}{j}\sum_{t=0}^{\color{red}n}{j\brace t}(2^{n-i})^t\\ &=\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{j=0}^i\binom{i}{j}\sum_{t=0}^n(2^{n-i})^t\frac{1}{t!}\sum_{p=0}^t(-1)^{t-p}\binom{t}{p}p^j\\ &=\sum_{i=0}^n\sum_{t=0}^i\sum_{p=0}^t(-1)^i\binom{n}{i}2^{(2^{n-i})}(2^{n-i})^t\frac{1}{t!}(-1)^{t-p}\binom{t}{p}\sum_{j=0}^i\binom{i}{j}p^j\\ &=\sum_{i=0}^n\sum_{t=0}^i\sum_{p=0}^t(-1)^i\binom{n}{i}2^{(2^{n-i})}(2^{n-i})^t\frac{1}{t!}(-1)^{t-p}\binom{t}{p}(p+1)^j\\ &=\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{t=0}^i\sum_{p=0}^t(2^{n-i})^t(-1)^t(-1)^p\frac{1}{p!(t-p)!}(p+1)^j\\ &=\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{p=0}^i(-1)^p\frac{1}{p!}(p+1)^j\sum_{t=p}^i(2^{n-i})^t(-1)^t\frac{1}{(t-p)!}\\ &=\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{p=0}^i(-1)^p\frac{1}{p!}(p+1)^j\sum_{d=0}^{i-p}(2^{n-i})^{p+d}(-1)^{p+d}\frac{1}{d!}\\ &=\sum_{i=0}^n(-1)^i\binom{n}{i}2^{(2^{n-i})}\sum_{p=0}^i\frac{1}{p!}(p+1)^j(2^{n-i})^{p}\{\sum_{d=0}^{i-p}(2^{n-i})^{d}(-1)^{d}\frac{1}{d!}\}\\ \end{aligned} \]

可以直接 \(O(n^2)\) 计算。

11.8

T3 P11151

考虑每个点会走到哪个点:其能走到的范围为位于 \([x,x+V]\) 的所有点。若这些点中存在一个 \(y\) 满足 \(p_y<p_x\),则可以走到 \(x\) 右边第一个比 \(p_x\) 小的地方是最优的。否则走到 \([x,x+V]\) 的最小值最优。

那么这样可以倍增维护一下。注意最后的边界问题。如果出现二类边就要直接走到最后。这可以通过额外维护一个倍增表示当前覆盖到哪里来判断。

11.10

T4 P5372

黑白染色建二分图,然后发现两张图都是最大匹配,考虑这两张图匹配的对称差,一定是一条链加若干个环。然后直接在这张图上 dfs 就行了。

11.13

T2 P11757

把每条边当成一个点建图发现是一棵树,直接树上倍增处理即可。

11.15

T2 LOJ551

既然说不能放重,那只能考虑构造一个匹配,B 选一个点之后 A 选匹配剩下的那个。容易发现奇数一定不行。偶数爆搜一下 \(4,6\) 可行,所以 \(\geq 4\) 的偶数可行。

T3 P8326

把环找出来后,若环长度不是 \(8\) 的倍数则直接无解。考虑两个颜色怎么做。

注意到这个图特殊在一个点最多在两个环中,所以考虑把一个点当成一条边,一个环当成一个点。转化之后这个图是二分图,于是这样直接跑欧拉回路,每个点入度出度相等,直接黑白染色即可。

四种颜色就对两种颜色边的子集再跑一遍就行了。

杂题

UOJ783

最终序列的最大值即为原序列的最大值和所有被触发的操作的 \(y_i\) 的最大值。考虑对每个操作 \(i\) 处理出,若其被操作,则能触发的后续操作的 \(y_i\) 最大值,设为 \(f_i\)

操作 \(i\) 能触发 \(j\) 的条件是:\(T_i\cap S_j\neq \varnothing,i<j,y_i\geq x_j\)。后面两个限制是二维偏序的形式,而前面区间相交很难处理。

考虑对 \(i<j\) 这一条件进行 CDQ 分治。那么先递归求出后半段的 \(f_i\),然后计算后面的对前面的影响。可以把左边的区间按 \(y_i\) 排序,右边的按 \(x_j\) 排序,双指针之后是线段树区间 chkmax 区间查 max。直接做即可。

CF2143F

CF2115C

CF2104G

CF2077E?!?

CF1887D

CF1957F2

ARC105E

偷题

dmy noip r4t4

给你一棵树,树上每个节点的权值有取值范围 \([0,R_i]\)。问有多少种赋权值的方案满足每个非 \(0\) 连通块的和是 \(m\) 的倍数。

\(n,m\leq 2\times 10^5,nm\leq 10^7\)

直接连通块背包然后 dsu on tree 优化即可。

posted @ 2025-11-30 11:07  Linge_Zzzz  阅读(0)  评论(0)    收藏  举报