省选联考 2024 简要题解
因为我还不会 D1T3 和 D2T3 所以没有题解。
\(\text{D1T1}\) 季风
记 \(prex_i=\sum_{j=1}^i x_i\),\(prey_i\) 同理。
考虑枚举 \(ans \bmod n\) 的值为 \(t\)。
相当于解关于 \(v\) 的不等式 \(|X-vprex_n-prex_t|+|Y-vprey_n-prey_t| \leq k(vn+t)\) 的 \(v\) 的最小非负解。
随便解一下,时间复杂度 \(O(n)\)。
\(\text{D1T2}\) 魔法手杖
先将所有元素按高位到低位插入到 trie 树上。
设 \(min_u\) 表示 \(u\) 子树内 \(a_i\) 最小值,\(sum_u\) 表示 \(u\) 子树内 \(b\) 的和。
考虑按位贪心,记当前要检查 \(now\) 是否可以成为答案。
那么我们可以设计一个简单的 dp:设 \(val_u\) 表示从 trie 的根走到 \(u\) 号点对应的 \(x\) 值是多少,\(lim_u\) 表示一路走过来要用加法操作的数的最小值是多少,\(minco_u\) 表示最小花费是多少。
转移是简单的,这样我们就得到了一个 \(O(nk^2)\) 的做法。
接下来进行一些观察,假设当前在确定答案的第 \(t\) 位,那么我们可以发现一些点在确定 \(t+1\) 位时的 dp 值和确定第 \(t\) 位时的 dp 是完全一样的。
具体的就是 trie 数上对应位 \(\geq t+1\) 的节点 dp 值不变,然后对应位恰好为 \(t\) 的 dp 会变,剩下的 dp 值基本和父亲相同。
然后考虑 bfs,按位枚举答案之后处理一个深度的点的信息即可,需要注意一下走到空节点是答案怎么更新。
时间复杂度 \(O(nk)\)。这题似乎 xor3 比较强,考场上过不了 xor3 可以过 xor4,5,6,7。
\(\text{D2T1}\) 迷宫守卫
考虑如果只让你确定第一个数是好做的。
可以直接二分然后 dp 一下。
具体的假设二分的值是 \(x\),把 \(<x\) 的看成 \(0\),\(\geq x\) 的看做 \(1\),相当于你不能走到 \(0\)。
转移式子是 \(f_x=\min\{f_{2x}+w_x,f_{2x}+f_{2x+1}\}\)。
考虑接下来我们确定了 \(p_1\),然后从 \(p_1\) 对应的点向上跳,并进入兄弟子树。
这个时候我们尝试撤销 \(p_1\) 情况下的决策,具体的如果发现仍然可以满足 \(\geq p_1\),那我们就撤销并进入子树,否则直接进入。
然后重复上述流程即可。
时间复杂度 \(O(2^nn^2)\)。大样例考场上只跑了 \(0.044\text s\)。可能有更高明的做法。
\(\text{D2T2}\) 重塑时光
总方案数是 \((n+k)!\)。
设 \(f_{S,i}\) 表示当前用了 \(S\) 集合中的点,划分为了 \(i\) 个非空集合方案数,算出这个就很容易统计答案了。
设 \(g_S\) 表示 \(S\) 中的拓扑序数量。
设 \(h_{S,i}\) 表示 \(S\) 中划分为 \(i\) 个非空独立集的方案数。
\(g_S\) 可以在 \(O(2^nn)\) 求出来,\(h_{S,i}\) 可以在 \(O(3^nn)\) 求出来。
对于 \(f_{S,i}\) 需要容斥,用求出来的 \(h_{S,i}\) 去做一做就行了,这一部分是 \(O(3^nn^2)\)。
最后复杂度是常数比较小的 \(O(3^nn^2)\),是可以过的。应该还有更高明的做法。
考场上没整出来这个容斥是怎么回事呢,唐完了。

浙公网安备 33010602011771号