退役前的睿智总结
就是想看看自己在退役之前还能犯那些睿智错误
1.遇到结论题就呆了,不敢猜结论,尤其是什么看上去就\(NP-hard\)的题目、数论题,记得多写写暴力、打打表表、观察一下性质、猜猜结论,最呆的就是第一眼觉得神仙之后跳了,最后回来发现结论也没时间搞了。
2.比不敢猜结论的更呆的是瞎猜结论,瞎对样例猜个结论发现过了,就跳了,一般会收获大零蛋的好成绩。多想想没有有反例什么的。
3.三个半小时的时间有些紧张,可能不够写拍,大样例只能或多或少代替拍的作用。如果有时间或者生成器和暴力都好写的话就去写了拍吧。
4.写了数据生成器不要光用于对拍,记得生成一组极限数据跑一跑,能检查一下数组是否开小或者是否被卡常。
5.数据生成器的范围一定要严格按照题目数据范围造,具体翻车实例参见R2D1T1
6.有乘法就想想乘0有没有影响,要不要特判;有分式不等式且有负数,记得化除为乘的时候要变号
UPD on 10.14 又又又又又乘法没判零保龄了
7.有想法的题目尽量去实现一下,说不定分数不低
8.中期自闭了不要发呆,多写写暴力啥的;万一到后面灵光一现写了个正解,结果没时间拍就挂了
9.对\(O(n^2\log n)\)不要很有信心,小常数撑死跑个\(n\leq 2\times 10^3\),想过\(n\leq 3000\)基本就是在想p吃,遇到\(n\leq 3000\)却只会\(O(n^2\log n)\)一般能搞搞去掉那个\(\log\)
UPD on 10.28 我错了,\(O(n^2\log n)\)txdy,如果\(\log\)是二分,树状数组等常数很小的\(\log\),还是可以对着\(n\leq 5000\)梦想一波的
10.需要断环为链的题要想想从某一个特定点断环是否会有什么特殊性质会更好做一些
11.垃圾你\(\min,\max\)都能打错你还能干什么
12.写了int qm(int x){return x>=mod?x-mod:x;}
忘了用,这和不取模有什么区别吗
13.有返回值的函数没有返回一个值,开了O2会获得大零蛋的好成绩
14.std::unique
之后的数组只有前面的可用,后面的东西不要再用了
15.puts("-1")
的返回值是\(0\),如果来一句return !puts("-1");
的骚操作就没了
16.开题顺序要合理啊,\(T1\)不一定是最简单的,\(T3\)也不一定是最难的,开题开错了很有可能就保龄自闭了,所以上来还是先把所有题都看一遍,都大致想一想再决定开题顺序。
17.数组开反,尤其是倍增的数组f[manx][20]
,用的时候却当成f[20][maxn]
来用
18.遇到看起来有什么奇妙性质的题记得写个爆搜找找规律
19.一些奇妙的题目可能存在一些奇妙的性质,可以把存在包含关系的区间去掉,去掉有包含关系的区间之后按照某一个端点排序另外一个端点也是单调的
20.点双数组开两倍
21.\(10^3=1000\)不是\(100\),要是对着\(10^3\)开\(100\)的数组就自闭了
22.启发式合并一定要记得sz[x]+=sz[y]
,否则就和暴力没区别了