26DMYCSP-S#4

Daimayuan CSP-S 2026 Round 4

闲话

省流:打成区了。

昨天,xudyh 说今天的题可能要左移一题,不是,这是 CSP 模拟赛吗?

20 min 把四个题看了一遍,T1 是神秘的数论,\(n\) 是平方的但是值域是 \(10^9\),估计是手法。T2 是神秘几何题,但是只涉及到线段交点,估计是本质传统最优化或者神秘的和 \(k,q\) 取值相关的题。T3 是看起来思维量比较大的数数,T4 目前看不懂是啥。

尝试一下 T1,因为是 \(a_i + a_j\) 所以不好用积性函数的性质,看上去不好直接在代数形式上优化,考虑直接用质因子的性质筛出 \(\mathcal{O}\left(\sqrt{V}\right)\) 范围内的数做试除法,这样大概是 \(\mathcal{O}\left(n^2 \times \omega\left(\sqrt{V}\right)\right) = \mathcal{O}\left(n^2 \times \frac{\sqrt{V}}{\ln \sqrt{V}}\right)\)。试了一下大概 \(5500 \text{ms}\),加上奇偶优化+手写哈希表记忆化就过了。

然后看了一会 T2 感觉如果 \((c,d)\) 都会变的话毫无思路,打了 \(45\) 部分分跑了。

看 T3,首先注意到可以给生成一个并集的过程定序,那么限制该并集的条件就是加入时扩展该并集的区间集合。直接对生成过程计数会重,所以考虑其他的不变量。对于其余被完全包含的区间,因为是对所有排列计数所以可以直接按随机事件处理他们的系数。故可以全部删掉,此时只需要对每个必要的区间集合计数,这个大概就是区间 DP,对非完全包含当前并集的区间,等价于扩展一段左端点或一段右端点,对完全包含的情况,等价于同时扩展左右端点。所以可以直接分三类转移,都可以记录前缀和优化,直接做到 \(\mathcal{O}(n^2)\)。转移相对好写,一共 \(2.5\text{h}\) 左右。

T4 会不了一点,写了个爆搜就跑了。

然后比完一看欸我 T1 怎么被卡了,T2 也 RE,搞什么鬼,然后 T1 关了记忆化就过了,亏我还手写的哈希表。T2 也是,快读的神秘 bug。彻底无语了。

最后是 \(35 + 0 + 100 + 10 = 145\),rk 78,以后需要注意的就是不能再图方便写缺省源了,还有就是要给对拍留足时间,尽可能在赛时环境下对拍,避免 T2 这种本地全过评测机 RE 的情况发生。


T1

tag:数论。

因为 \(\varphi(a_i + a_j)\) 是积性函数,但是直接做加法没法利用到性质,所以考虑从另外角度来计算。

考虑从每个质因子角度,对每一对 \(a_i + a_j\) 计算其贡献。由于 \(a_i + a_j\) 中至多有一个大于 \(\sqrt{a_i + a_j}\) 的质因子,所以可以直接筛出 \(\sqrt{2 \times 10^9}\) 内的所有质数,对 \(a_i \bmod p\) 分桶,那么 \(p\) 能产生贡献的 \(a_i + a_j\) 就必须满足 \((a_i \bmod p) + (b_i \bmod p) = 0\)。由此可以直接做到 \(\mathcal{O}(n^2 \log V + n \times \omega(\sqrt{V}))\)。

ac link


T2

tag:二分、贪心。

首先看 subtask 1,注意到 \(\mathcal{O}(nq)\) 就是枚举每条边与 \(x = c\) 直线联立求交点取 \(\min\)。

然后看 subtask 2,因为确保线段两两无交,所以可以直接二分,大概就是因为无交所以对于 \(a_i \gt a_j\) 的线段不可能有 \(b_i \leq b_j\) 否则就有交点了。因此直接按照 \(a_i\) 从小到大排序后 \([0,T]\) 中这些线段的取值时时不交。由此可以直接二分做到 \(\mathcal{O}(n \log n)\)。

那么正解就已经出来了,因为至多和 \(k\) 条线段相交,所以 \(i\) 和 \(i + 2k + 1\) 必定是不交的,那么只需要二分确定可能最优的边界 \([l,r]\),也就是最大的 \(l\) 使得 \(l + 2k\) 在 \(d\) 以下而 \(l + 2k + 1\) 在 \(d\) 以上,同理最小的 \(r\) 使得 \(r - 2k\) 在 \(d\) 以上而 \(r - 2k - 1\) 在 \(d\) 以下,则因为至多 \(k\) 条线段相交,可以确定 \(r - l \leq 4k\),由此直接对剩下的区间 \([l,r]\) 暴力检验 \(\min\) 即可。时间复杂度 \(\mathcal{O}(qk + (q + n) \log n)\)。

ac link


T3

tag:DP、组合数学、贪心。

首先直接对排列计数是困难的,你无法直接确定一段区间 \([l,r]\) 和它里面所有区间 \(S\) 的一一对应关系,因为可能存在不止一种构造方式 \(T_1, T_2 \subseteq S\) 使得分别仅用 \(T_1,T_2\) 中的区间均能凑出 \([l,r]\)。

但是如果你确定了 \(T\),多余的 \(S \setminus T\) 是已知的,考虑对区间建图,每个区间一个点,连边等价于区间有交,那么确定了 \(T\) 要求出所有可能的 \(S\) 就等价于给定一张图的一棵生成树,要求你计算拓扑序。这个直接就是 \(\frac{sz!}{\prod \text{sub}!}\),其中 \(sz\) 对应总的大小,\(\text{sub}\) 对应每一段可以任意划分的集合的大小。对应到这个题目上,其实也等价于将计数转化为求概率,因为是对所有 \(p\) 计算所以可以直接转过去。只需要确定凑出 \([l,r]\) 的区间集合,若一个区间加入后能往左或往右扩展原区间那么该区间就属于凑出 \([l,r]\) 的区间集合。令这些区间为 \([l_1,r_1],[l_2,r_2],\dots,[l_m,r_m]\),那么求出 \(c_i\) 表示被 \(l_i,r_i\) 严格包含的区间个数,总方案数就是 \(\frac{n!}{\prod_{i=1}^{m}(n - c_i)!}\)。

由此,可以直接区间 \(\rm DP\),对于一个区间 \([l,r]\):

  • 最后一步仅从更右侧的左端点转移而来,此时有 \(f(x,y) \to f(l,r), l \leq x , r = y\)。
  • 最后一步仅从更左侧的右端点转移而来,此时有 \(f(x,y) \to f(l,r), l = x, r \leq y\)。
  • 最后一步加入了一个严格包含原区间的区间,此时左右端点均向外扩展,有 \(f(x,y) \to f(l,r), l \leq x \leq y \leq r\)。

直接暴力实现,时间复杂度是 \(\mathcal{O}(n^3)\) 的。对这三类情形,转移分别是一行/一列/一个上三角对应的前缀和,最后一种仅仅加上了一个和 \(c_i\) 相关的系数,所以可以直接前缀和优化做到 \(\mathcal{O}(n^2)\)。

ac link


T4

tag:贪心、DP、链表。

最紧的限制显然是最大、次大染色不同。又因为总共的染色只有 \(3\) 种,所以只要最大、次大确定了,合法区间的第三大值对应的染色也已经确定了。

由此可以直接求出前缀/后缀最大值,令它们的位置是 \(t_1,t_2,\dots,t_m\),那么这些位置只需要保证 \(c_{t_i} \neq c_{t_{i+1}}\) 即可,而对于任意的 \(t_{i-1} \lt L \leq t_i \lt t_j \leq R \lt t_{j+1}\),区间 \([L,R]\) 的第三大值染色方案在 \(t_i,t_j\) 确定的时候,就已经确定了。

所以可以考虑每个区间是否产生贡献。如果第三大值卡在第一、二大中间那么此时区间必定合法,否则记最大、第二大、第三大值位置分别为 \(i \lt j \lt k\),则合法性取决于 \(c_i, c_k\) 是否相同。对第一种显然可以直接对着相邻的 \(t_i,t_{i+1}\) 计算,对第二种,等价于恰有一个 \(j\) 在 \(i,k\) 之间,使得 \(p_j \gt \min(p_i, p_k)\),则可以用单调栈直接对每个点 \(j\) 求出前驱/后继最近的,大于 \(p_j\) 的位置,设为 \(L_j, R_j\) 那么贡献就是 \((j - L_j) \times (R_j - j)\)。

因此,如果一个区间内不包含 \(\geq 2\) 个 \(t\) 中的位置,那么该区间的贡献直接确定了。否则不妨设包含 \(t_i\),则可以根据上述第二类情况,通过 \(c_{t_{i-1}}, c_{t_i}, c_{t_{i+1}}\) 直接确定 \(c_l, c_r\)。换言之,只需要设 \(f(i,0/1/2,0/1/2,0/1/2)\) 表示以当前 \(i\) 作为中间的 \(j\),\(t_{i-1},t_{i},t_{i+1}\) 染色分别为后三个参数对应的情况,此时只需要确定每个点的前,后 \(3\) 个最近的前缀/后缀最大值,就可以直接按上面第二类讨论的策略,模拟得到当前染色对 \(i\) 是否合法,从而计算其贡献。

时间复杂度 \(\mathcal{O}(n)\)。

ac link


posted @ 2026-09-27 18:52  Twistedmind  阅读(3)  评论(0)    收藏  举报