脑弹寄录
部分分看全,认真想每一档(春测 T4 忘了贪 $k=2$)
强制在线要记 lastans 和异或 lastans(省选模拟赛)
状压下标从 $0$ 开始,大于 $30$ 位开 long long(省选模拟赛)
看清每个变量什么意思(省选模拟赛)
好好读题,模拟样例后再写题(省选 D1T3,D2T2 连读错两题)
统计转贡献不仅可以计数(求满足某条件的数之和),而且可以求最值(求满足某条件的数的最值)(PKUSC D1T1 场寄)
线段树 lazy tag 下传完要清空,整体修改的时候要改,多测所有节点的 lazy tag 都要清空
无返回值函数必须是 void 型的,这个在 O2 下可以 $100\to 0$(模拟赛)
开数组之前想好要用多大,一定要记得 +50,写完必须检查一遍每个数组的大小(模拟赛)
背包记录方案可以滚动数组。(模拟赛)
数位 DP 尽量避免 memset,如求 popcount=k 的数的个数,令状态为 $f_{i,j}$ 表示填到 $i$ 位,后面还要填 $j$ 个 $1$ 的方案数即可避免在不同 $k$ 之间 memset。(模拟赛)
$\log$,根号之类的尽量现算,不要用一个常数。(模拟赛)
平衡树维护集合,不能直接把初值 merge 起来,正确做法是先排序再依次 merge。(模拟赛)
最大 / 最小值的初值要根据被统计元素的取值范围设定,不要设大 / 设小。(模拟赛)
时刻记得取模,尤其是 f[i] = (......) % M
的形式。(模拟赛)
还有 ... * ... % M * ... % M * ... % M
的形式。(模拟赛)
只保证互质,不保证质数,不能用费马小定理求逆元。
注意边界,比如是否出现负数下标。(模拟赛)
DFS 记得回溯。(模拟赛)
考虑如下代码:
struct node
{
int x, y, lazy;
};
node operator+(node a, node b)
{
node q;
q.x = a.x + b.x;
q.y = a.y + b.y;
return q; //q.lazy 未初始化!
}
一定要仔细检查样例输出是否正确,比如是否少输出了操作步数。(模拟赛)
__lg(0)
会寄。(模拟赛)
开始打省选模拟赛之后好像就没更过了,现在更一下
不熟(只知道原理,几乎没写过)的东西不要到考场上嗯造,造不出来很亏。(模拟赛)
自信即巅峰,数组往大开,万一跑过了呢(当然还是手造一组数据验证一下更稳)。(模拟赛)
注意细节,对于贪心 / 构造题,时间充裕时尽量手动模拟一下程序的行为与预期是否相符。(模拟赛)
写一行代码之前先想想自己要写什么,避免因为 ** 错误耗费大量调试时间。(AT)
在不犯 ** 错误的前提下尽量提高码速。(模拟赛)
不要花巨量时间写一个复杂度危险的算法(比如 $n\le 2000$ 写平衡树 $O(n^2\log n)$,或者 $n\le 10^5$ 写 $O(n\log^3 n)$),最后很有可能只得暴力分。
老毛病,部分分看全,认真想每一档(第一条,模拟赛又犯了一遍)
时间充裕的情况下,对于期望能过的部分分,造几组极限数据,看看是不是真的能过。(模拟赛)