易错警示
作者:互联网
1:位运算的优先级是真的不行。甚至比大于号,小于号,等于号还要低。所以用到位运算,别管程序美不美,直接小括号括起来!!!!
2:long long 类型 和 int 类型比较大小会出锅的。建议转到同一类型比较。
3:对于模数非常大的情况下,快速幂有可能会爆炸long long。(p^2 >1e18)。这里就需要用到O(1)快速乘
typedef long long LL;
typedef long double LDB;
inline LL mul(LL a, LL b, LL p) {
return ((a * b - (LL)((LDB)a * b / p) * p) % p + p) % p;
}
4:注意c++里面数组下标可以为负,但是只有一小段是正常的。所以有的时候数组越界不会RE,会带来WA等错误。所以一定要弄清楚下标的范围,不能偷懒。
5:注意乘的时候不要爆炸int/ long long了。
6:位运算也要注意不要爆int。比如1<<50是错误的。应为1LL<<50。
7:如果数组开的刚好越界一点点,可能会出现undefined behaviour,会导致数组的顺序定义不一样,结果不一样的情况。要避免。
8:网络流建模的时候,边表要开的足够大。因为可能会有很多额外的边~。
9:注意图是否联通,是否存在重边和自环。
10:树剖向上跳的时候,是判断dep[top[x]]和dep[top[y]]才决定是否交换。因为x,y都跳到了fa[top[x]]或fa[top[y]]。
while (top[x] != top[y]) {
if (dep[top[x]] < dep[top[y]]) swap(x, y);//att
query2(1, dfn[ top[x] ], dfn[x]);
x = f[ top[x] ];
}
if (dep[x] < dep[y]) swap(x, y);
query2(1, dfn[y], dfn[x]);
11:FFT的空间是3∗(n+m),不然会RE。
12:写if底下多个语句的时候要注意括号是否括到位,不括的话只会包含一条语句。
(如bzoj4025的4发WA)
13:一定要死扣数据范围,出题人有可能出出来那些让你RE的,但是常理容易得到的数据。往往就在一个取不取等的问题上导致大锅。(bzoj4025头两发RE)
14:c++自带的math库里面。log2(x)是以二为底取对数,log(x)是以e(2.71828)位底取对数
15:long double 的使用。读入应该用$Lf读入,输出应该用%Lf输出,或者可以转化成double 类型输出。具体原因是因为%f只处理4个字节,%lf处理8个字节,%Lf处理12个字节。如果没有配套使用的话,就有可能会出现RE的情况。
16:n∗2是n<<1,而不是1<<n。这种智障错误一般出现在分心的时候。
17: exit(0)可以在程序的任何一个地方关闭文件并退出程序。返回值为0。
标签:易错,dep,top,long,RE,lt,警示,LL 来源: https://blog.csdn.net/hanjinbo/article/details/88383613