2024CCPC郑州站 游记(VP)
省流
叶神发威砍下推式子 M 铜牌将到手 主包犯蠢惨败模拟题 F 打铁坑队友
9.28
内含剧透,请vp后再来。
不是题解!!!!!!!
赛前
最近国庆太摆烂以前的事真忘了。总的来说就是叶神下午有事要提前一点走,不过此时倒也没什么。
赛时
经过榜一顿混乱,根据榜开始看 L 题。题目给了一个 Z 字形曲线,就是一个分形,四个小 z 构成一个大 z,题目给出一段,要求你找到这段最早出现的位置。因为是四个小 z 一循环,我提出大概就是一个四进制然后判断起始点和结束点是否相同,然后细节讨论一下,简说就是四进制第一个不同的前面全部变零就行。然后我手玩发现是二进制,于是就结束了,忘记是谁码的了反正不是我,总之就是在 \(33min\) 一发过了这题。
通过之后,简去开了我们最早看的 F 题,我和叶神则跟榜看 M。M 是给了一些参数,所有参数之和为 \(k\),然后对每个参数设置一个概率,要求这些概率拿到 \(k\) 个后的集合选出来的概率和相应参数的积成比例。简而言之面对推式子的题目我就习惯性退缩挂机了,长时间队伍没什么进展,我更是毫无想法只是单纯坐在那里。期间简上机玩了一会 F 题但也没什么进展,过了很长一段时间叶神找到我给了我一个式子,给我玩了一会之后告诉我是不是能二分答案。我感觉没什么问题,让他去证了一下单调性也是对的我就上机开始码,\(117min\) 交第一发挂了,我认为是卡精度。对着搞了一会挂了两发但精度好了一点,然后简要求上机,我就又随便改了一发交又挂了,然后简很快下机了。叶神提出他用 py 重新实现一下,然后我说最后试一下,把 \(while\) 循环的精度改成了 \(for\) 的固定循环次数过了,此时 \(156min\) 吃了四发罚时,但似乎铜牌有望,我就状态更好了一点。
由于简在看 F,我和叶神就去看了 B。B 是一个 \(n\leq100\) 的三角形的格子阵,格子上有 \(1-4\) 的数字,还有一个四面骰。要求用四面骰在格子阵上滚动,朝下的一面数字要与格子上写的相同,问走到某格最少要多少步。我看完题大手一挥说这个数据范围再怎么样四维 \(dp\) 就搞定了,然后很快发现其实只需要两维确定位置,骰子的形态就也确定了,所以就是个 \(bfs\)。我给叶神讲到一半简也过来听,给他重新讲一遍之后懂了,就让他来码,我和叶神去接手 F 题。
F 题是一个人在时长为 \(k\leq1e8\) 的一天里会获得 \(n\leq1e5\) 个任务,每个任务有开始和工作时间,这个人会立刻做最早拿到的任务,求 \(q\leq1e5\) 次询问某日某个任务将在何时完成。我立刻开始分类,分成了三种情况,一个是每天任务不会堆积到第二天,第二种是会堆积到第二天但第三天不会堆积更多,第三种是任务会越积越多完不成。我在想第三种怎么找什么时候堆满的时候叶神告诉我如果是第三种第二天一定堆满,问题就迎刃而解了。堆满任务之后,只需要记录前面的任务总共做了多久就行,不用担心具体是哪个,然后用总时间去推日期和时间即可。
然后我和叶神去看 C,C 题是给了一个矩形的四个点,要求每次选两个点把他们的中点加入点集,要求输出每一步知道加入给定的点,叶神提了一些很诡异的说法,我也没有特别反驳掉,一时半会没想出问题但就是感觉很不对,我也没什么推进。
过了一会在 \(205min\) 时简带着一发复制粘贴错误的罚时通过了 B 题,我就上机去码。在此期间简毙掉了叶神的乱搞,很快叶神离开简也跟着走,剩我一个人码 F。我在 \(268min\) 时交了第一发超时,发现是忘记写上前两天的记忆化了,加上之后又挂了一发,无能为力没找出问题,最后没交比赛结束了。
赛后
这场比赛 \(4t\) 才有铜牌,三道题是完全没戏的,主要原因我觉得是一个我在前两个小时一直挂机没什么建树,无论我是去看别的题还是推推 M 都应该有些作用,还有就是 F 实现的很烂最后没过。如果把握好这两题,相信我们队伍是有可能冲击银牌的。
F 后来用了题解的方法补,题解进一步简化了我们的结论,是否会堆积下来唯一的判断标准就是任务工作量的和与一天的时长比较。如果一天的时长比较多,那么某天的某任务的轨迹就会和第二天的一样,否则就是从第二天这个任务开始的时间算起要加上剩下所有天的任务量之和,然后再直接去除就可以了,非常好写。
接下来去补 C,C 题我一开始是用的位运算,去找需要第几位然后加上,但无论怎么搞都是错的,题解也只写了手玩发现什么规律,但我没发现,ai 也没搞懂规律,怎么都不对。后来看了官方题解,发现任何点都可以通过上一个点与四角的点作中点构成,一开始先确定可以取到这个点后再跑一个 \(dfs\) 就可以了。 \(dfs\) 最短的原因是如果有两个或更多四角点都可以与上一个点形成这个点,那上一个点会与这个点是对称的,所以不影响长度。总的来说,银牌线确实很有冲击的可能。
接着我去补了 K,K是一道概率题,又是推式子,我很不擅长。题目给定了 \(n\leq1e5\) 个关卡,然后有 \(k\leq1e9\) 个道具,每关的失败率都是 \(p\leq0.5\),如果失败就会死回家,也可以消耗一个道具死在原地继续挑战这一关。\(nq\leq20\),求通过这个游戏的尝试闯关次数的期望。首先肯定是先算算全是和没有道具的情况,发现如果道具不限量说用就用,那么所需的道具量并不大,所以直接大胆的把 \(k\) 比较大的情况按无限道具算。剩下的 \(k\) 比较小的情况就可以通过一个 \(nk\) 的 \(dp\) 搞定了,去考虑在这个地方及之前都不用道具或者在这个地方开始使用道具两种情况,整体思路很有趣。要注意的是第一要确定 \(dp\) 表示的状态是什么,这题的状态有很多种表示方式,容易弄混。还有就是推概率这种会失败的就是把失败的情况再加上再通过自己的期望,然后解方程是一种常见的推式子形式。
最后补 G 题,给一个 \(n\leq2e5\) 的数组,每次区间加或者查询一个偶数区间内的数能不能两两配对并使这些对的值相等。一开始没什么头绪,去看了题解发现可以把 \(a+b=2mid\) 转换成对于 \(a\) 查询有没有 \(a = 2mid - b\)。当查询一个东西是否存在时,就可以利用哈希。那么我们只需要去统计某一段中的哈希值的 \(a,-a\) 的和以及平均数,就可以算出这一段是不是符合条件,用线段树维护就行了。然后交上去之后超时了,发现是求哈希的 \(log\) 有点大,然后利用分块去维护,就可以 O(1) 的求某个值的哈希值了,然后再加上一些乘法的部分换成 \(int128\) 就通过了。
2025年10月3日

浙公网安备 33010602011771号