那些年犯过的傻逼错误&对自己的提醒

发布于 2021-07-01  143 次阅读


有些错误越看越傻逼,发现还是要记下来,长点记性。
顺手记录一些对自己的提醒。

  1. 千万要想清楚再写代码。

代码写了一百多行的时候就应该问问自己:我的想法 tmd 到底对不对?带着一个混混沌沌的想法去猛冲,冲到最后会炸掉的。

  1. 多测的初始化考虑周全。

比如边链表清空只需要 edge=0; memset(head,0,sizeof(head));
以及不要忘记一些关键变量的清空。

  1. 一定不要原地踏步!

不管是代码写挂了还是想不出思路,一定不要对着屏幕发呆!
努力寻找关键性质。比如,为什么 $1 \le a_i \le 10^6$ 而不是 $10^9$ ?从中寻找突破点吧。
Do something , Instead of nothing.

  1. 关于取 $\max$ 和 $\min$ 的那些事。

有事没事千万不要再用 #define max(a,b) ((a) > (b) ? (a) : (b)) 这种语句。

这是因为其中的 $a$ 和 $b$ 在比较的时候会被调用多次!

所以要卡常还是得用:

inline int max(int a,int b){ return a > b ? a : b; }
inline int min(int a,int b){ return a < b ? a : b; }

虽然优化也并不是很大。

  1. 关于读入。

在混着读入字符串和数字的时候,直接使用 ios::sync_with_stdio(false) 优化后的 cin 读入会省去很多不必要的麻烦。需要注意的是,混用读入方法是很容易出错的,且 $Linux$ 下和 $Windows$ 下的数据格式不同,不如一并使用 cin

  1. 关于 dp 题。

在写 dp 写挂的时候,可以尝试寻找三个方面的错误:状态转移方程、循环控制范围、边界条件。尽量去过一遍代码的所有细节点,多构造特殊数据。


我们无法选择过去,但我们可以改变未来。