csp2025游记

2025/10/31

打模拟赛。赛后给明天每一题规划了时间:J组 T1 10min、T2 20min、T3 30min,S 组 T1 1h、T2 1.5h 剩下时间解决后面的题和检查前面的题。

2025/11/1

08:30~12:00

先开 T1,是很简单的贪心,按照计划 8min 左右写完。T2 找规律和模拟都行,我写了模拟。因为输入写错了,大约 22min 写完,有点超时了。

T3 看到选择不覆盖的线段就想到了优先选择右端点靠左的线段,于是枚举右端点,用前缀异或和判断到上一个右端点之间有没有合法的左端点。大约 25min 写完。

T4 看到后联想到之前看到过的题:求 \textgreater a 的选择方案数可以用 2^n 减去 \le a 的选择方案数。原本的思路是枚举最大值,分别从左右开始 dp,用合并跳过最大值所在的位置。仔细想想,发现可以将边长排序,这样就不需要从右往左 dp 了。耗时 1h16min 做完。

J 组唯一的失误就是 T2 输入错了浪费了几分钟。以后可以写完输入先测测输入。

12:00~14:30

发现大多数人都能 AK,感觉 J 组题目不难。

14:30~16:30

先开 T1,是反悔贪心,耗时不到 1h 写完。接着看了 T2~4,T2 很快想到思路:枚举城市化哪些村庄,然后跑最小生成树。用了 Prim 实现,但时间复杂度算错了。一般 \left| V \right|\left| E \right| 同阶,我就把复杂度当作 O(\left | V \right |\times \log \left | E \right|),但这道题  \left| V \right|  与  \left| E \right|  差了 100 倍。直到我写完代码发现第三个大样例要跑 2s 才反应过来 Prim 的时间复杂度是 O((\left | V \right|+\left | E \right |)\times \log \left | E \right|)。然后换了一个思路,提前把边排好序,用 Kruskal 算法求最小生成树。很多人都被卡常了,还好我没有。耗时 1h35min 左右写完。

T3 很快就想到了 AC 自动机+hash,但我不会打 AC 自动机,想了 30min 后还是只能写暴力。T4 没时间了,只写了 O(n!) 的暴力。

总结

检查输入,多算几遍时间复杂度,没把握的题先打暴力再想可能会更好。

posted @ 2025-11-02 22:35  zzwdsj  阅读(11)  评论(0)    收藏  举报  来源