其他分享
首页 > 其他分享> > 易错警示

易错警示

作者:互联网

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)3*(n+m)3∗(n+m),不然会RE。

12:写ififif底下多个语句的时候要注意括号是否括到位,不括的话只会包含一条语句。
(如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:n2n*2n∗2是n&lt;&lt;1n&lt;&lt;1n<<1,而不是1&lt;&lt;n1&lt;&lt;n1<<n。这种智障错误一般出现在分心的时候。

17: exit(0)exit(0)exit(0)可以在程序的任何一个地方关闭文件并退出程序。返回值为0。

标签:易错,dep,top,long,RE,lt,警示,LL
来源: https://blog.csdn.net/hanjinbo/article/details/88383613