以史为鉴【长期置顶】

本文将记录我在OI中一些典型、极难察觉、犯过不止一次的细节或非细节错误,包括代码和考场策略方面,并作为唯一(大概率)置顶、长期置顶,以备随时查看。

  • 遇事不决先看看数组开小了没。

  • 对于一些需要判无解且多测的题目,一定要读完所有数据再判无解返回,要不然这组数据读不完就会读到下一组。

  • 模数是\(1e9+7\)?还是\(998244353\)?甚至有题目使用\(1e8+7\)

  • 考场上我觉得对的东西不一定对,分析清楚再写,别急着写,不然可能有更能确保正确的做法,就没机会想到了。

  • 最sb的行为,题没看清就乱写。你仔细看看题目让你干什么。

  • 关于取模:对于类似等差数列求和之类的带有除号的公式,先除再取模。不要无脑处处取模。

  • 不多测就不用管清空的事了?你看看有没有那些数组重复使用每次使用前都要清空。

  • 看看一些边界情况能不能正确解决,自己要多搓几组样例测一测。

  • 树形背包转移套路:\(dp_{x,i+j}=combine(dp_{x, i},dp_{y,j})\),一般提前记录\(x\)信息辅助转移以防混乱。这样方便上下界优化(\(i:0\to \min{siz_x,k}\)\(j:0\to\min{siz_y,k-i}\))以使复杂度\(O(nk^2)\to O(nk)\)

  • 为了避免红温,可以适时上厕所洗把脸,千万不要急。

  • 能拿到的分,先拿到手,时刻记住目的是拿分而不是冲正解,复杂度要用计算器仔细算清楚,不知名状物千万别写,难写难调还不一定对。一定先拿分,尤其是代码不难写的时候。

  • 时刻注意时间,要有紧迫感。

  • 当你觉得实在没办法,瞪眼一下看看有没有性质,比如什么什么种类数\(\log\)种之类的,或者先写暴力尝试优化/DP先设状态考虑转移和优化。

  • q[read()].pb({read(), i});先读大括号里面的。。。所以这种东西,还有类似自加自减的,尽量分开写。

  • 如果你有时候懒省事用了swap,不妨看看后面需不需要换回来。。。

  • 以防忘了:线段树合并,被合并的就永远消失了,再有信息会记录到新开的上,再合并也会合并上新开的。也分写法

  • 建议在编译选项使用-Wall -Wextra -Werror以查看一些可能导致错误的warning

  • __builtin_popcount(x)用于\(O(1)\)求x二进制位下1的个数。

  • 还有哪个傻逼像我一样到现在了还把ij写反。

  • 关于二分:首先一定想清楚是否具有单调性;其次,有时不同的情况会有不同的决策,例如有时奇数和偶数要分开二分而不是在一个二分里讨论。

posted @ 2025-09-25 10:53  Lordreamland  阅读(17)  评论(1)    收藏  举报