CSP-S 2025补题记
《重回到CSP-S的赛场上,发现我终究是菜狗》
菜狗只做了前三个题。
社团招新
这在
luogu上是一道黄,但是它是一道贪心最开始注意到
a[i][d]可能会相等(这样一个不重要的条件),然后就开始分讨+贪心,结果我错了。
这个题应该算是一道反悔贪心,针对与 a[i][d] 可能会相等的情况,完全没有必要去想怎么处理它,对于 \(i=1,2,\cdots,n\) 取满意度值最大的部门分配,而对于相等的情况先随便选一个部门。
然后这样就可以发现至多只有一个部门人数会大于 \(\frac{n}{2}\),不像上文分了不知道多少情况。
对于这样一个人数大于 \(\frac{n}{2}\) 的部门,将多余的人数调整到其他部门去,这些人需要满足调整后(即相差)的贡献最小的,排序即可。\(_{\text{Code}}\)
道路修复
这在
luogu上是一道蓝,我感觉相比T1的贪心要好写一些((菜菜,现在已经只会口胡出假做法了
Sol 1
在考虑不改造任何一个乡镇的情况下,构建原图的最小生成树为最优解。
然而在考虑改造的情况下,剩下的 \(m -n + 1\) 边也不会有额外的贡献。
对于乡镇的数量 \(k\), 满足 \(k\le 10\),即 \(2^k\le1024\)。
那么目前先考虑将原图的最小生成树的 \(n - 1\) 计算出来,假设选取了 \(\ell\) 个乡镇 \(S\) 进行改造,那么就会多出 \(\ell \cdot n\) 条边,这 \((\ell + 1)\cdot n - 1\) 条边的最小生成树的边权和加上 \(\ell\) 个乡镇的 \(c_i\) 即为此时的答案。
枚举每个乡镇是否改造,取其最小值即为最终答案。时间复杂度为 \(\text O{\left(m\log m+2^k\cdot k n\log kn\cdot \alpha(n)\right)}\)。
这样的做法在
luogu的机子上跑了 \(80\ \text{pts}\) 。\(_{\text{Code}}\)
Sol 2
在 Sol 1 的基础上,对边权离散化后桶排。时间复杂度为 \(\text O{\left(m+2^k\cdot k n\cdot \alpha(n)\right)}\)。
Sol 3
在 Sol 1 的基础上,将所有乡镇的 \(k\cdot n\) 边与最小生成树的 \(n - 1\) 条边统一排序,然后在后续的枚举过程中判断那些边需要被加入即可。时间复杂度为 \(\text O{\left(m \log m + kn\log kn+2^k\cdot k n\cdot \alpha(n)\right)}\)。
这样的做法在
luogu的机子上跑了 \(100\ \text{pts}\) 。\(_{\text{Code}}\)
谐音替换
真的没想到
CSP-S居然考到了ACAM,给我小小的心灵一个巨大的震撼(借这个机会来复习一下貌似这个题也可以用字符串哈希做(还没看
Sol 1
这个如果没有替换的步骤的话,就是一个ACAM的板子题。那么来看这道题。
替换的步骤可以写为 \(x+\left(y\to y'\right)+z\),最开始想的是如果我们先去考虑对原串做多模匹配,在对后串做多模匹配,最后相互比较计算贡献。(然后我不会写了。。。
参考其他思路\(_\text{@Register_int}\),我们将 \(x + y+ z\) 和 \(x + y'+z\) 合并成一个字符串,这样就将替换的步骤,融入到了字符串中(好厉害的思路),使得两个串变为 \(x + c+y+c+y'+c+z\),中间用字符 \(c\) 隔开体现替换的步骤。
对 \(s,t\) 都进行这样的操作(然后我把 \(q\) 次询问离线下来了,跑一次ACAM,好像是有跑的更快了些),然后这样多模匹配。
这样的做法在
luogu的机子上跑了 \(100\ \text{pts}\) 。\(_{\text{Code}}\)
Sol 2
等我做一下
听说今年 CCF 上了少爷机/jy/jy/jy

浙公网安备 33010602011771号