|
|
简要题意对于三个长度为 $n$ 的 现在我们有三个长度为 $n$ 的随机 $n \le 3 \times 10^5$ 解法引理:设 $\text{maj}(a,b,c)$ 为 $a,b,c$ 中的众数;对于三个长度为 $n$ 的 01 字符串 $s_1,s_2,s_3$,设 $\text{maj}(s_1,s_2,s_3)$ 为长度为 $n$ 的字符串 $t$,其中 $t_i = \text{maj}(s_{1,i},s_{2,i},s_{3,i})$,则 $f(s_1,s_2,s_3) = |\{s_1,s_2,s_3,\text{maj}(s_1,s_2,s_3)\}|$。 我们首先说明以上四个字符串均满足题设条件。$s_1,s_2,s_3$ 满足条件是显然的。 对于 $t=\text{maj}(s_1,s_2,s_3)$,对于任意 $1 \le i < j \le n$,存在下标 $1 \le a < b \le 3$ 满足 $s_{a,i} = s_{b,i} = t_i$,又存在 $1 \le c < d \le 3$ 满足 $s_{c,j} = s_{d,j} = t_j$。根据抽屉原理 $\{a,b,c,d\}$ 中有两个数相等,对应的下标即是满足题设条件的 $k$。 接下来我们说明不存在其它字符串满足条件。当满足条件的字符串 $t$ 不等于 $\text{maj}(s_1,s_2,s_3)$ 时,设 $t_i \ne \text{maj}(s_1,s_2,s_3)_i$,则 $t_i$ 只在 $s_{1,i},s_{2,i},s_{3,i}$ 中出现恰好一次(不能不出现,否则不可能满足题设条件),不妨假设其为 $s_{1,i}$。此时取任意 $j \ne i$,根据题设条件必然有 $t_j = s_{1,j}$(因为 $k$ 必须取 $1$),因此 $t = s_1$。 进一步地,可以分类讨论得到 $|\{s_1,s_2,s_3,\text{maj}(s_1,s_2,s_3)\}| = 4 - \sum_{i=1}^3 [\text{maj}(s_1,s_2,s_3) = s_i]$:
由于期望的线性性,只需要计算 $\Pr[\text{maj}(s_1,s_2,s_3) = s_i]$ 即可。由于每一位的随机事件是独立的,所以直接把每一位相等的概率乘起来就行了。 复杂度 $O(n)$。
题目4284 [THUPC 2025 Final] 好串
AAAAAAAAAAAAAAAAAAAAAA
评论
2026-01-29 18:38:58
|
|
|
题外话
Description
$k=0$
正解
题目4283 [THUPC 2025 Final] 石墨烯
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
评论
2026-01-29 18:38:16
|
|
|
English versionEach operation transform three adjacent characters into one. If the string starts with If the string ends with If an operation transformed a string ending with Consider the case where the strings contains All cases of
However, Since Another case is that the string ends with In the remaining case, there are even 0's between some pair of adjacent 1's, but the number of characters before the first 1 is odd, there must be only one pair. Suppose the string is 1-indexed. It is because the indices of such pair of 1's must be [odd, even]; while the indices in the previous case must be [even, odd]. Thus, if there are two such pairs of this case [odd, even], in the parity sequence [odd, even, ..., odd, even] there must be an [even, odd] as a substring. Therefore, any other pair of adjacent 1's must have odd 0's in between, i.e., $0(00)^*\color{blue}(10(00)^*)^*\color{red}1\color{black}(00)^*\color{red}1\color{blue}((00)^*01)^*\color{black}(00)^+$ in regular expression. Any operation remains the string in this case, except that the string is $0(00)^*\color{blue}(10(00)^*)^*\color{red}1\color{red}1\color{black}(00)^+$ and the operation is $\color{red}1\color{black}?\color{red}1\color{black}:0$ makes 1. Since it must ends with `00`, it becomes a string ending with `0` and every pair of adjacent 1's has odd 0's in between, which is a case mentioned before that has no solution. In conclusion, it has a solution if and only of at least one of the two following conditions is met:
中文版本英文题解里描述了做本题的一种思路,以及证明。 如果要直接写做法的话,是下面这样: 假设字符串下标从 $1$ 开始编号。 首先判断是否存在 $i,j$ 使得 $i$ 是奇数,$j$ 是偶数,$s_i$ 和 $s_j$ 都是
此外,还有一种比较特别的解法: 可以发现构造的过程中需要用到不超过两层括号(不算整个表达式最外面一层)。所以如果你要是猜到了这一点可以直接使用动态规划从右到左扫这个字符串,记录每一层栈中的内容。最多三层栈,每层栈最多两个比特,一共 $6^3+6^2+6=258$ 种状态。大概也能过。 不知道有没有什么奇怪的乱搞可以搜过去。不过我还是欢迎吧。
题目4282 [THUPC 2025 Final] 一个 01 串,n 次三目运算符,最后值为 1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
评论
2026-01-29 18:37:59
|
|
|
引言今年命题会的时候,我们惊奇地发现今年的模拟题还没有着落。 于是我翻出了这个压箱底的 idea,当作一个中模拟。 idea 恰如其分来自在你清食堂的吃饭经历,获得了大家的一致认同。 时限只开 3s 是因为有 100 个点,开太久会更严重地卡评测的。std 跑了 1.6s。 比赛情况本题的完整版本预期难度是 medium,不过我个人认为是 easy+(?)。 丝路市西套村代表队获得了本题首杀! 本题大约有一半的队伍通过了本题。 同时,不少夺冠热门队伍在本题上获得了大量罚时。 题意简述食堂餐桌座位分布在第一象限网格每个 $3 \times 3$ 完整格子右上角的 $2 \times 2$ 格子,剩下的部分为走廊。 每次可以从一个走廊格子走到四连通相邻格子。 每次一名顾客从最左下角的格子出发,试图找到最优的一个满足自己容忍条件的空座位。容忍条件形如桌子上坐了几人以及自己因此应该去哪里(请参考原题面)。 此外还会有部分座位突然出现或消失顾客,也即状态翻转。 输出每次顾客坐到了哪里,以及突然变化的顾客是来是去。 操作次数 $q$ 不超过 $5 \times 10^5$。第二类操作值域不超过 $10^4$ 且总是修改在餐桌处。3s/1GB。 思路本题总体思路比较简单,这里直接给出完整版正解做法。 注意到第一类操作可能遇上的下标范围是 $O(\sqrt{q})$ 级别的,我们不妨考虑做预处理。 观察到其优先顺序是固定的,我们可以预先排序得到各个餐桌格子的优先顺序。这个排序可以通过数学方法或者 bfs 做到线性。 考虑第一类操作,我们可以用 set 或可删堆(对顶堆)存一下每个满足对应条件的位置。 第二类操作对于下标超界的部分也可以单独拿一个 set 存;没超界的部分可以和前面的部分使用同一套方法处理。 不用太多卡常,验题人开了八九个 set 都过了。std 不到 2kb。 本题非常善良,值域只开 $10^4$ 是为了方便压位(记得用 $10001$ 压)。没有特意卡 umap/bitset 之类的东西,应该是可以轻松过的。 总结
题目4281 [THUPC 2025 Final] 食堂
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
评论
2026-01-29 18:37:36
|
|
|
题意求有多少个长度为 $n$ 的排列,使得 $S$ 为其长度为 $k$ 的字典序最大的子序列和其长度为 $k$ 的字典序最小的子序列的最长公共子序列之一。 题解下文用 $T$ 代替 $S_0$,用 $R$ 代替 $S_1$。 性质一:考虑 $T$ 的形态,令 $i=\min\{i \mid i = k \lor T_i < T_{i+1}\}$,则 $T_1, T_2, \cdots, T_i$ 为 $p$ 字典序最大子序列长度为 $i$ 的前缀,$T_{i+1}, \cdots, T_k$ 为 $p$ 的长度为 $k - i$ 的后缀。 下称 $T_1, \cdots, T_i$ 为 $T$ 的头部,$T_{i+1}, \cdots, T_k$ 为 $T$ 的尾部。可以用类似的方式定义 $R$ 的头部与尾部。 容易发现 $S$ 唯一。考虑 $S$ 的形态。不妨令 $T$ 的尾部长度 $< R$ 的尾部长度。则 $T$ 的尾部一定是 $S$ 的一段后缀。删除这段后缀后,令 $R$ 尾部的剩下部分为 $p_l, \cdots, p_r$。则此时 $S$ 的一段后缀为有序集合 $\{p_i \mid i \in [l, r] \land p_i \in T \}$。删除这段后缀后,剩下的部分为两个头部的最长公共子序列。由于两个头部都是单调,因此 $S$ 剩下部分的长度至多为 $1$。 接下来可以考虑分类讨论开始 dp 计数了。
总时间复杂度 $\Theta(n^3)$。 Bonus: $n \le 5000$。 瓶颈在于以下问题:有多少个长度为 $i$ 的排列,其字典序最大子序列的长度为 $j$。 设 $dp_{i,j}$ 为我们所希望求出的答案。每次尝试向已有排列中加入一个更小的数。如果这个数被放在了整个排列的最右边,则字典序最大子序列的长度会增加 $1$,否则不变。按照这个思路对 dp 式子进行转移,时间复杂度 $\Theta(n^2)$。 由于 $\Theta(n^2)$ 算法不仅要求对 dp 进行优化,还要求选手在分类讨论的过程中进行相当精细的实现,因此最终只开了 $n \le 400$ 来允许实现相对较差的算法通过。
题目4280 [THUPC 2025 Final] 对脑电波
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
评论
2026-01-29 18:37:19
|
|
|
题意简述给定 $n$ 个非负整数 $x_1,x_2,\dots,x_n$。 对于任意 $n$ 个节点的无向连通图 $G$,将其节点由 $1$ 至 $n$ 标号,则其分数定义为 $$\text{score}(G) = \sum_{i=1}^n \sum_{j=i+1}^n \text{dist}_G(i, j)x_ix_j,$$ 其中 $\text{dist}_G(i,j)$ 表示图 $G$ 上 $i$ 到 $j$ 的最短路径长度。 你的任务是输出所有 $n$ 个节点的无向连通图中分数的最大值。 $1 \le n \le 300$,$0 \le x_i \le 2000$ 解法我们首先假设至少有两个 $x_i$ 不为 $0$,否则答案一定是 $0$。 定理 1:一定存在一棵树取到最大分数。 不是一棵树的 $G$ 删掉一条不改变连通性的边肯定会让 $\text{dist}_G(i,j)$ 变大,所以这个定理是显然的。不过只知道 $G$ 是一棵树还不足以解决本问题。 定理 2:一定存在一条链取到最大分数。 假设分数最大的 $G$ 是一棵树但不是一条链。以任一度数大于等于 $3$ 的点 $r$ 为根。不妨假设其度数为 $3$,三个子树为 $A,B,C$,子树根分别 $a,b,c$,子树的 $x$ 的和分别为 $x_A,x_B,x_C$。假设 $x_A \le x_B \le x_C$。 考察如下调整:删去 $(r,b)$ 加上 $(a,b)$。此时从 $C$ 和 $r$ 到达 $B$ 的距离增加 $1$(多经过 $a$),从 $A$ 到达 $B$ 的距离减少 $1$(少经过 $r$),其他距离均不变。 因此图的分数变化为 $(x_r+x_C-x_A)x_B$。当这个值大于 $0$ 的时候,我们就可以得到一个分数更大的方案,矛盾。 若 $(x_r+x_C-x_A)x_B = 0$,有两种情况:
因此每次调整要么会提升 $\text{score}(G)$,要么 $\text{score}(G)$ 不变的同时 $\text{score}^\star(G)$ 增加,而两者均为正整数且有上界。故不断进行调整后必然到达一个 $(\text{score}(G), \text{score}^\star(G))$ 的局部最大值,此时无法进行以上调整,也就是不存在度数大于等于 $3$ 的点。证毕。 运用以上定理,我们此时的任务是把 $x$ 重排为 $x'$,最大化 $\sum_i \sum_{j>i} (j-i)x_ix_j$。 我们还需要以下有关这个问题的解的性质。 定理 3:一定存在一个单谷的重排 $x^\star$ 达到最大分数。 不妨假设 $x$ 两两不同且大于 $0$,这可以通过给每个数加上一些微小扰动完成。 若最优的重排 $x^\star$ 不是单谷的,则存在 $p$ 满足 $x^\star_{p-1} < x^\star_p>x^\star_{p+1}$。考虑两种调整:
注意到两个增量的第一项都是正的,而两个第二项的和为 $x_{p-1}+x_{p+1}$ 也是正的,因此必然存在一个调整增大分数。证毕。 最后我们把分数式子稍微变换一下。 $$\begin{align*} \sum_i \sum_{j>i} (j-i)x_ix_j & = \sum_i \sum_{j>i} \sum_{k=i}^{j-1} x_ix_j \\ = & \sum_k \sum_{i \le k} \sum_{j > k} x_ix_j \\ = & \sum_k x_{1 \sim k} \times x_{k+1\sim n}, \end{align*}$$ 也就是说分数等于每个位置的前缀和和后缀和的乘积的和。 由于最优解是单谷的,考虑从大到小依次加入每个 $x_i$,此时每个 $x_i$ 一定加在未加入的部分的第一个或最后一个。加入进去之后,可以确定一个前缀和(加在后面是确定后缀和,其实也就是确定了剩余位置的前缀和),也就确定了分数中一项的贡献。 因为分数只关心每个位置的前缀和是多少,依此设计 DP:设 $f_{i,j}$ 表示加入了前 $i$ 大数,加在前面的所有数的和为 $j$ 时分数的最大值。加在后面的数的和可以直接通过 $i$ 和 $j$ 推导出来。转移枚举第 $i+1$ 大数放在前面还是后面,加上对应项的贡献即可。 复杂度 $O(n^2 \max x_i)$。
题目4279 [THUPC 2025 Final] 图,距离,最优化
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
评论
2026-01-29 18:37:00
|