# define max(x,y) ((x)>(y)?(x):(y))
# define max(x,y) ((x)>(y)?(x):(y))
尽量少用(尤其是数据结构),可能把函数放里面调用多次然后就被锤成弟弟了……- 写最短路($SPFA$或$Dijkstra$)注意每次用队列里的点更新下一个点而不是起点
也就我错这种sb错误了 - 还是
define
,注意如果# define mid (l+r>>1)
,二分答案时先记录答案再更新边界ans=mid,r=mid-1/l=mid+1
- 空间不要卡着开,$+5+10$什么的
- 手玩样例
- 线段树等数据结构初始化、
pushdown
、pushup
不要漏了 - 还是线段树,注意左右边界,查询或修改的时候注意哪里要变查询/修改边界
- 取模,
(ans+=qwq)%=mod
这种写法还是少用的好,里面可能爆int
啥的 - 堆里面的比较函数要反着写
memset
是个很鬼畜的东西,只能赋值连续的一段内存,所以多维数组就不要用了好像会没赋上值- 还是
memset
,如果一个函数自变量是数组memset
的时候只会赋值第一个数? - 注意
int
是$(1«31)-1$,容易爆 - 该取模的地方取模,常数大点
应该没问题 - 输入输出
long long
用%lld
- 树链剖分里面是
d[top[x]]<d[top[y]]
,跟后面的比较d[x]<d[y]
是反着的 - $tarjan$点双边双分清楚!
写到这里我还去查了一下……点双判断割点,边双判断割边 - 用队列或栈要记得弹出
- 数组定义到
MAX
就不要调用[MAX]
了 - 做题时
TLE
就不要光想卡常了……可能不是正解 - 考试时想不出正解打暴力往死里卡常的时候一定要保证答案正确
- 思路不清晰/代码实现复杂的时候一定要想清楚每一步在码
- 多组数据时各种数组初始化,宁愿慢一点也不要漏了
听说rqy因为这个没Au - 初始化的补充,邻接表初始化
h[]
和num
- 单调队列注意队列里存的是编号还是元素,防止编号与元素直接比较
- 树状数组单点修改不能直接赋值为$x$,要查询点值然后单点修改
血的教训 - 看清楚数据输入顺序再读入,看清楚是分开读还是合起来读
血的教训 freopen
检查里面$w$的大小写血的教训- 题目是多组数据的时候注意要把数据全读入了再特判
差点血的教训 - 一定要读懂题,学好语文非常重要
- 广义$SAM$不要用基数排序处理线段树合并
其实好像是可以的但是我不想写对的广义SAM了就这么认为吧 - 指针移动的时候注意不要出边界
- 写有返回值的函数一定要返回值(开$O2$会出错)
- 求叉积的时候注意数据范围,小心乘爆
- 文件操作检查是否写了
.in
.out
- 测大样例的时候注意要用文件操作
- 点分治找子树重心的初始值一定要设好
- 注意题目要求的时间和空间限制
- 考试时先把每个题的暴力打出来并保证好没有锅