CSP-S 2025 神秘游记

· · 生活·游记

第一次考 S 组,之前考过三次 J 组。坐标 BJ。

复赛开始前

初赛结束后

哦我的天哪看看这是什么,我 CSP-S 组初赛过了。我已经退信竞转化竞半年了,没想到还能过。

哦我的天哪,111 日劲爆复赛。报名看一看。

哦我的天哪,把我一个住西三环外边的人扔到东北五环的考点吗,有点意思。行吧。

复赛开始前 3

我:我不能这么颓废了,我要刷 S 组真题。

(看着 2020 年的公历 10^9 年和可以收容 1.8\times10^{19} 个生物的动物园陷入了沉思。)
(看着 2021 年的 DP 题陷入了更深的沉思。)
(看着 2022 年的不可以总司令陷入了第三层沉思。)
(看着前年的神秘密码锁,去年的决斗游戏陷入了第四层沉思。)

我:S 组难度变化这么大?看看同班同学在打什么。

我于是看到了同学在打括号序列。

我:这个……这是啥。
同学:区间 DP。

我看着那个 DP 题被吓哭了。决心发愤图强学点 DP。

(注:实际上再也没动过 DP 题)

复赛当天早上

我:哦我的天哪我的那些化竞朋友们估计会想念我的。(我们今天要上竞赛课,但是信竞因为要打 CSP 不上)

同学:你在哪个考场。
我:东坝。
同学:巧了我也在。
我:我不考 J 组。
同学:请输入文本。

总之是到了下午,进了机房,开了虚拟机,进了程序回收系统。

--- ## 考场上 ### 读题环节 哦我的天哪让我们嘟嘟题。 [T1](https://www.luogu.com.cn/problem/P14361): > 有 $n$ (保证 $n$ 是偶数)个人被发配到 $3$ 个部门,每个人对每个部门有个满意度,你的目标是让满意度最大。特别的,你不能让某个部门有多于 $\lfloor \frac{n}{2}\rfloor$ 个人。 [T2](https://www.luogu.com.cn/problem/P14362): > 有 $n$ 个城市 $m$ 条路,保证所有城市连通。现在 CCF 的大手让这些路都断掉,修复每一条路有个权值,最小化权值。 我:这不就是最小生成树板子。 > 但是,有 $k$ 个乡村想要城市化。城市化需要花费一些权值,从这些乡村可以和已有的城市修路,修路仍然有权值。(只有城市化之后才可以修路) > > 问你怎样可以在花费最小的同时让所有**原来的城市**连通。(乡村可以不连通) 我:我可以收回刚才那个最小生成树吗? [T3](https://www.luogu.com.cn/problem/P14363): > CCF 让我们去学语言学竞赛。 > > 有 $n$ 组对应关系,每组从这个字符串对应到那个字符串。 > > 然后有 $q$ 个问题,每次给你俩字符串,问你第一个字符串能否通过一次对应到另一个字符串。 我:这是什么? [T4](https://www.luogu.com.cn/problem/P14364): > 你是一个公司,有 $n$ 个人过来应聘。每天面试一个人。每天的面试结果是固定的,不会因人改变。 > > 蛋!每个人有一个耐心值,如果在他前面有至少 $c$ 个人面试不通过或主动放弃,那么他会主动放弃。 > > 问你有多少种排列方式可以使得有至少 $m$ 个人被录取,答案对 $998244353$ 驱魔。 我:嘶…… 读下来发现一道题都不会。完蛋了要爆零了。 这时我注意到 T4 有一个部分分是每天的面试都可以通过。 来吧,我们看看数据。 你等会,什么叫耐心值为 $0$? *高管:放心!我们精心设计了题目,使得每个人都能通过!* *面试者 A:不行!只要我前面有至少 $0$ 个人面试不通过,我就退出以示抗议!* *面试者 B:只要我们不是第一个面试的人,我们就绝不屈服于你们的排序黑幕!* 上面是发生在 CCF 总部的真实影像。确信。 克服万难,我终于……没写出部分分来。 算了算了,输出 $0$ 混一点分吧。万一[总司令](https://www.luogu.com.cn/problem/P8819)的亡魂庇佑我们呢。 第四题离开吧,真的。 等等,我想上迷惑代码大赏,我要在第四题的代码里整点活。就写下考场心路历程吧。 --- ### 按顺序切题 T1 回去看 T1。看不懂。 我:这个 $\lfloor \frac{n}{2}\rfloor$ 就很难受,这就没办法贪心了。看起来是个 DP。 写写状态……定义 `d[i][j][k]`... 我突然发现我能想到的唯一状态定义是: *看到第 $i$ 个人,前面部门 $1$ 有 $j$ 人,部门 $2$ 有 $k$ 人,部门 $3$ 有 $l$ 人,状态为当前满意度最大值。* 这个四次方定义肯定不行。$1 \times 10^{15}$ 个 `int`。被吓哭了。 所以这题一定不能是 DP。 那也就是更高阶的算法。 那这还能是 T1 吗?T1 就搞这么难吗? 我捡回了贪心。因为我注意到 $\lfloor \frac{n}{2}\rfloor$ 是个提示。 --- 说下贪心思路。 我们贪心两遍。第一遍是个人都想得到,就是按照每个人最喜欢什么去安排。 这样可以最大化满意度,但问题在于会有部门超过 $\lfloor \frac{n}{2}\rfloor$ 个人。 怎么办呢?第 $2$ 次贪心: **按照最喜欢 $-$ 次喜欢的值的差值从小到大排序,逐渐挪走所有在超限部门里的人,直到超限部门的人正好 $\lfloor \frac{n}{2}\rfloor$ 个。** 有人可能会疑惑,这真的能行吗?就问一个,你在挪走一个超限部门的人的时候,会不会有其他部门超限呢? 不会。原因很简单。 $\lfloor \frac{n}{2}\rfloor$ 就注定了只能有一个部门超限,不会有两个部门同时超限。 同时也注定了在把超限部门员工挪走的过程中,没有其他部门会超限。 证明很简单,如果上述两件事情会发生,就说明有两个部门人数都 $> \lfloor \frac{n}{2}\rfloor$,这不可能。(两个大于 $\frac{1}{2}$ 的数加起来一定大于 $1$)。 嗯对就这样暴力。 应该能拿满。 --- ### T2 怎么说呢……直接上最小生成树当然也能做。不过只能拿 $16$ 分。惨烈。 我想到了这么一种方法: 暴力遍历全部 $2^k$ 种乡村振兴方案,对于每种情况建一个图,在图上跑最小生成树,然后在答案里额外加上城市化需要的代价。 我是这么写的,但是经过我的测试,测试点 $2$ 就已经干到 $27$ 秒去了。 但是往好处想,他至少在 $100$ 秒内得到了答案,说明我们压缩一下可以让他压缩到 $1$ 秒。 于是我就开始各种邪门优化,比如“建图的时候就看乡村振兴的代价是否已经太大”,“跑最小生成树的时候看代价是否太大”,“快读”这样的。 最后压缩进 $700$ ms。 希望能得点分。理论最多 $48$,期望 $30$。 ### T3 呜呜呜考场上想到的部分分方法居然是错的…… 简单讲就是看从前一个字符串到后一个字符串的变化有什么。 然后拿着这个变化去那 $n$ 个二元组里找。再带入看看这个二元组在不在这个字符串里。 然而这个做法是错的。hack: ```plains input: 1 1 abcd aefd abcabcd aefabcd std output: 0 my output: 1 ``` 简单讲就是只看前一个字符串在不在里面,不看具体位置。 算了,能拿多少是多少。理论最多 $30$,期望 $10$。 ### T4 总司令之后,再无总司令。 理论最多 $100$(出题人发癫答案全是 $0$),期望 $0\sim4$。 ## 后记 第一次写游记,算是练练手了。 而且写游记可以让我发现自己的问题,就比如说我发现我的 T1 中可能存在一个致命错误导致 T1 爆零。少掉 $100$ 分就真的彻底没戏唱了。 有没有大佬告诉我 BJ 1= 分数线会是多少。 本文 Markdown 共有 $3836$ 个字符。