2025.7.27 模拟赛总结

A. 和除或 [容斥] [计数]

期望 100(-), *1500, 24 min

首题依旧签到。考虑到除后做的是上取整,因此答案仅可能为 \(1\)\(2\)。注意到答案为 \(2\) 当且仅当加法出现了进位(才会大于按位或)。又因为每个数 popcount 最大为 \(4\),因此每次加入一个数进来,\(\mathcal{O}(3^4)\) 枚举子集后容斥计算贡献,顺便加进去。可使用 unordered_map,总复杂度 \(\mathcal{O}(3^4 n)\) 简单解决。

因为是这几场最难的 A 所以稍微多做了一会(其实时间也差不多)。

B. 礼物 [贪心] [分讨]

期望 100(-), *1500, 17 + 30 min

其实是非常简单的题,先判掉长达 \(2k-1\) 的连续段,再看 \(\geq k\) 的连续段,若同色有两个这样的连续段则无解,异色各有一个必有解;否则令长度为 \(len\),有无解看同色有无 \(\geq 2\)连续段 / 顶边界点,或同色有无长度不超过 \(2k - 2 - len\) 的连续段即可。理论上非常简单。

但是我做的时候少考虑了一些情况,花了 17 min 通过了全部样例。后来想了想发现这个随机的样例强度肯定很低,样例个数也比较烧,因此拿出来跟暴力跑了个拍,发现炸完了。然后又花十几分钟才改完,总共浪费了有半个小时。很大一方面原因是,平时做题太依赖样例大样例判断自身正确性,等样例强度弱了而自己思考又不细致,我不炸谁炸。这告诉我们想清楚再写才不会遗漏。

又一次在第二题上失误了,时间控制太差了。总结是总结了但没见改进,不过这次问题比较显著了,希望能有所改进。

C. 连续段的价值 [二分答案] [状压 DP]

期望 100(-),*2000, 49 min

非常简单的一个 C,使我怀疑在打 S 组模拟赛。

最小值最大果断二分答案,考虑答案的 check。注意到 \(k\leq 17\),于是考虑状压:不难发现可以按当前解决了的字母状态 \(s\) 和当前处理前缀 \([1, i]\) 记一个 \(n2^k\) 的状态。很劣,但是发现没必要记前缀,直接记完成状态的最早位置即可转移,每次 check 预处理一下当前位置对于这个字母下一个足够长度连续段的位置即可。

主要是看完题到外面走了一会去上厕所了,很快想到了正确做法,没法立即去上手硬控几分钟,本来时间可以再压掉近 10 min,就能给 D 留下更充足的时间了。

D. 送外卖 [线段树]

做梦 100(-100),*2600, 剩余全部。

其实做法很显然是线段树维护区间信息,但是有些信息会无法合并。我一开始选择了错误的无法正确合并的信息进行维护,调了很久,浪费很多时间;后来信息是对的了但是有冗余,为了简化代码思维量用树状树组维护前缀和临时写的 \(\mathcal{O}(\log^2)\) 修改查询。后来发现如果我没这么做,直接正常维护,我将很快发现我维护的冗余并缩减到最优维护信息,然后将有充足的时间进行调试。

但是结果就是我浪费了大量时间,更更改改一些毫无意义的东西,最后根本没写完根本没分。招笑了。反思了一下,发现不只信息合并写得劣,我的修改写得也很劣,十分愚蠢,数据结构功底不足的现象。令人难过。

总结

总分 100 + 100 + 100 + 0 = 300(-),的确没有挂分,但是为了不挂分付出了不少时间代价,不过还算划算,毕竟把那半个小时给我 D 我照样写不出来。

这个故事告诉我们,首先做题想到做法后要思考缜密提前想到细节,才能实现一帆风顺;冲难题正解不要老想着给自己后续调题留后路,大不了到时候改改看。平时要养成良好的代码实现思路和代码习惯,多学习优美的代码实现技巧,可以抢时间。

高下立判地,fzx A 和 C 花了大量时间,B秒 D半小时爆切,与我整好相反,拿下 AK。而我被 D 狠狠爆杀两个小时不足做出,实力上差太多了。以前不想写难写东西的债还在追我。

然后模拟赛思维活跃的时候不要去待机。

posted @ 2025-07-28 01:41  Lightwhite  阅读(22)  评论(0)    收藏  举报