注意无效值运算后能否保持无效值的性质。
比如 min (inf, inf + 负数) 就会得到一个有效值。无法得知这个状态是否是合法
2017/4/9
1.
double x;
int y;
int a = xy;
这样是不合适的取整。
应该改成
int a = xy + 1e-8;
2.底数等于模数,费马小定理不成立(如果用于快速幂降指数,判底数为0可以过掉)
2017/4/9
BSGS 底数为0彻底失效,因为0在任意剩余系都不存在逆!!!此时要特判无解
2017/3/29
2^64要用ull
2017/3/27
按时间分治不用把算答案的那些东西放到节点上……只用存操作,在dfs的时候可以再算。否则又t又m
1<<50毁一生
1ll<<50
2017/3/24
如果你想在数组里处理一段有相同性质的元素(比如权值)
注意循环会不会处理第一个元素。
比较好的写法是先声明一个起始坐标 ‘int beg = i’
然后’while (i <= n && w[i] == w[beg]) {
//something
i++
}’
注意i结束时是超尾的,所以要么循环结束之后立刻i—,要么把外层循环的i增去掉
还有一种写法
for (int i = 1, j; i <= n; i = j) {
for (j = i; j <= n && w[j] == w[i]; j++) {
//something
}
}
看起来还是第二种比较好
垃圾垃圾真垃圾,模拟我都写不好
2013/3/22
子串个数是很容易爆int的,sa求得时候要注意
2017/3/15
后缀数组几个注意:
- m 初始化
- 算前缀和的时候范围是 m
- 分隔符不能用一样的
- cmp别写成s,应该写rk
- ‘z’ 就是 122 了……很容易爆char的……
- 因为用了越界rk为0的性质,所以要开两倍空间和初始化rk
2017/3/13
200*200 = 40000结果是四个零不是三个零。。。
心血来潮把共轭边和边的顺序写反了然后导致需要访问边的时候爆炸……
影响范围不能压进状态里,导致影响范围重叠时不知道能不能放
2017/3/6
打dinic不过脑子,经常写错的几点
- bfs不push(s)
- bfs队列循环内q.push(v), lv[v] = lv[u] + 1 u写成s……
- dfs不判lv[v] == lv[u] + 1
- sz = 1
2017/3/5
括号位置错误,不等号进去了,参数大爆炸。
2017/2/25
- splay,线段树中的null节点不要影响答案!!特别是需要维护min和max的时候。第三次犯了!!
2017/2/20
- 假如你数据生成器不小心造了超边界1的数据,你可能要调一上午。
- 主席树的logn可能是权值的n
- 并查集合并时先判是否已经在一个集合里。在不维护额外信息的状况下不影响正确性。但是(按秩)时间可以被卡掉。
2017/2/14
- 你到底要怎么切块
- 离散化后没还原
2017/2/11