做题习惯
- 静态查错一遍后再测样例
- 读double型的变量尽量用scanf
- (int)r * 1000 应写成(int) (r * 1000)
- 开新题之前,检查这一题的输出格式/数据范围会不会爆long long
对于极端“小数据”
- 矩阵乘法的时候注意考虑初始化的那几个值,特判输出。
对于取模
- 做了减法之后取模一定要while(ans<0)ans+=mod;
- 你读入一个数,若它已经超过模数,直接模!别回头!,ksm的a和k都是可以直接模的
- 题目要求模一个数的时候看清楚模的是不是质数
- 除法一定不能取模,要化简公式或者乘逆元
对于数组的初始化和long long
- 如果判断-1的条件是 (某某==0x3f3f3f3f)千万不要开long long
- 看到负数就要考虑数组的初始化,如sum[]等不用求max/min的数组就不需要,而保存最值的要填充0x3f/-0x3f
对于建边的关系
- 有重边会对答案有影响吗
- u>v 会对答案有影响吗 swap 你值得拥有吗
对于边界
- 在搜索中,如何转化边界进行巧解
- 在while(x)的时候一定要考虑x==0怎么办,不然,呵,你会debug很久很久
调试了很久都会出错的
- 树剖里写所有有关线段树的操作都要写id[x]而不是x!新图已经建好了!
- 字符串的最后一位可能是‘ ’,注意一下。
- 多组数据初始化
常见编译错误
- segmentation fault 你很可能是没有把数组开够………………
- 用vector TLE的话可能需要reserve一下
v.reserve(100010),etc.
错题本
- 用STL的容器时,必须先询问s.size(),要不然直接询问比如栈的s.top() 会爆(详见双栈排序)
- memset不能给double类型数组赋初值(详见借教室)
- memset可以给struct整体赋值
- 在网络流中,若加边双向边,须使用 ^ 操作,所以tot(边数)一开始要赋值一个奇数(反向正向边)
- 在差分约束中,SPFA一定要从0点开始.要不然图可能不连通(建一个超级源点0,向每个点连一条长度为0的边)
- 在差分约束中,跑最长路是为了找环
- 在差分约束中,形如a-b>=c的两边同乘-1得到b-a<=-c,即a+(-c)>=b,建图即可.
- 对于差分约束系统来说,建议先无脑比题目中的点数多开个十来倍,因为差分约束系统经常会需要增加一些奇奇怪怪的条件(比如>=0)和辅助边
原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634633.html
时间: 2024-10-02 14:59:00