1.如果遇到需要处理小数(无论什么情况,只要出现了小数),空间足够的情况下用double,详见NOIP2016D2T2蚯蚓,不开double炸穿天。
2.计数时输出结果时用long long。
3.邻接链表存储图的时候first数组初始值一定要memset为-1。
4.数组开够就行了。
5.1既不是素数也不是合数
7.树状数组的lowbit(int x)返回的是x&(-x)而不是(-x)&x
8.在写线段树的时候如果要加lazy标记,则每遍历到一个新的点则应该更新其lazy标记
9.当需要求和的时候如果不知道数据范围建议开long long,(特别是线段树和树状数组)
10.多重循环的变量名一定要分开,血的教训(洛谷3387)QAQ
11.输入时的%lld不要写成%d,改了好久才发现(洛谷3390)QWQ
12.如果题目给的数据的点的编号是从0开始的,for循环时一定要注意!!!(fzoj2106改了好久最后发现时就是这个问题)
13.特殊的卡常技巧:tarjan从n~1缩点
14.求a mod p的逆元的时候如果不确定p是否为质数用扩展欧几里得,不要用费马小定理,特别是中国剩余定理!!!
15.费马小定理(a^(p-1)mod p=1)适用条件:p为质数且gcd(a,p)=1。
16.倍增求lca:当我们将x跳到与y同一层的时候,条件为:if(deep[grand[y][j]]>=deep[x]&&grand[y][j]),一定要加&&grand[y][j],QAQ调了一个小时代码,发现这里炸了。
17.用用fread的时候数组一定要开够
18.两个double类型的数进行比较,不能用==,而应该这样写:
1 double eps=1e-8;//eps需要随题意改变 2 bool io_same(double a,double b) 3 { 4 if(b<=a+eps&&b>=a-eps) 5 { 6 return 1; 7 } 8 return 0; 9 }
到时候直接调用io_same函数查看返回值。