2025.11.1 CSP
\(2:30\) 开始
开 \(\text T1\),想到正解了但不太确定,后来仔细思考发现是对的,代码很短,大概半小时过了
开 \(\text T2\),很快想到 \(O(nk2^k)\) 的算法,但是实际上还要乘以 \(\alpha(n)\) 且时限为 \(1s\),不太确定,想了一段时间没有什么更好的思路,就写了,给的大样例只有实际最大值的 \(\frac 1{10}\) 到 \(\frac 13\),分别跑了 \(100\) 多 \(ms\) 和 \(300\) 多 \(ms\),之后自己造一组极限数据要跑 \(1.1\sim 1.2s\),本题随机数据足够强了,不知评测机上有多少
大概还有 \(2.5h\) 左右开始 \(\text T3\),一步步做下来最终写了 \(7k\) 左右,还剩不到 \(1h\) 时调完
最后想 \(\text T4\),想到了三次方的 \(\text{dp}\) 但没有调出来,最终拿了 \(8pts\)
预计 \(100+(80~100)+100+8\)
范前两题和我一样,\(\text T3\) \(0pts\),\(\text T4\) \(44pts\),金前三题一样,\(\text T4\) 过了,大部分人都和金差不多
upd 11.6 : 我 \(308\),金 \(400\),范 \(224\) T2 只有 80
T1 社团招新 / club
先每个 \(a_{i,\ast}\) 都取最大的一项,设 \(c_o\) 表示选择第 \(o\) 项的数量
若 \(\max c\le \frac n2\),显然找到最优解
否则恰好一个 \(c_o>\frac n2\),取出选择了第 \(o\) 项的 \(a_{i,\ast}\) 的集合 \(S=\{i\}\),按 \(\max \{a_{i,\ast}\}-\text{2ndmax}\{a_{i,\ast}\}\) 排序后不断取最小的替换,直到满足要求
正确性显然
时间复杂度 \(O(\sum n\log n)\)
T2 道路修复 / road
对初始的做一次 \(\text{MST}\) 保留选择的 \(n-1\) 条边,加上额外的 \(kn\) 条,总计 \(kn+n-1\) 条边预先按边权排序,然后枚举选择的额外点的集合 \(s\),依次枚举边,若端点不在 \([1,n]\cup s\) 中则跳过
时间复杂度 \(O(2^knk\alpha(n))\)
T3 谐音替换 / replace
忽略 \(s_{i,1},s_{i,2}\) 相同的,忽略 \(t_{i,1},t_{i,2}\) 长度不同的
对于字符串 \(s,t\),令 \(F(s,t)=(f,l)\),其中 \(f\) 为两者第一个不同的位置,\(l\) 为两者最后一个不同的位置
每组 \((s_{i,1},s_{i,2})\) 和 \((t_{i,1},t_{i,2})\) 分别按 \(F(s_1,s_2)=(f,l)\) 分割为 \(L=\text{rev}(s_1[1,f)),R=(l,|s_1|]\),\(M=s_1[f,l]+s_2[f,l]\)
令给定串的 \((L,M,R)\) 的集合为 \(S\),则查询 \((L_2,M_2,R_2)\) 相当于求 \(S\) 中 \(M=M_2\),\(L\) 为 \(L_2\) 前缀,\(R\) 为 \(R_2\) 后缀的 \((L,M,R)\) 的数量
对于所有 \((L,M,R)\),将 \((L,R)\) 挂在 \(\text{Trie}\) 的 \(M\) 位置,对于每个结点,分别对 \(\{L\}\) 和 \(\{R\}\) 建立两个 \(\text{Trie}\),则一次查询相当于求两棵树上根到结点的路径中共同包含的点的数量,容易转化为静态二维数点
总时间复杂度 \(O((L_1+L_2)|\sum|+(n+q)\log q)\)
T4 员工招聘 / employ
令 \(f_{i,j,k}\) 表示前 \(i\) 个人中 \(j\) 个没有被选择,前 \(i\) 人中有 \(k\) 个 \(c\le j\) 的
令 \(p_x\) 表示 \(\sum_i [c_i\le x]\),令 \(cc_x=\sum_i[c_i=x]\)
转移 \(f_{i,j,k}\) 时,对于 \(s_{i+1}=1\)
若要选择 \(i+1\) 则需要在 \(c>j\) 的部分中选择一个,转移为
若不选择 \(i+1\) 则在 \(c\le j\) 的部分中选择一个,并枚举之前 \(c>j\) 的部分中 \(=j+1\) 的数量 \(l\),转移为
\(s_{i+1}=0\) 的转移类似
时间复杂度 \(O(n^3)\)

浙公网安备 33010602011771号