1.所有数据都要初始化!!!
PS:struct 默认的初始值不一定是0!
2.链式前向星数组范围:无向图*2
3.lowbit(x): 取x最后一个是1的一位和它后面所有的0
4.所有的初始化数据都要留有余量(+5)
e.g.逆元的那个数组inv[]。。。
5.两个int相乘可能会爆long long 所以要*1ll
e.g. int a=1ll*x*y%mod
6.取模问题注意啥时候要加(%p+p)%p
7.多组询问,数据要检查是否在循环前init过了
8. memset一个double数成0xff(255)会变成NaN数,超出范围
e.g 极大值:0x7f(不能用0x3f), 极小值:0xfe (0x7f:0x->16进制 7->0111 f->1111,即为127,第1位符号位)
如果double再参与运算溢出了,保险起见 一般建议设成:MAX:0x42, MIN : 0xc2
https://blog.csdn.net/cggwz/article/details/81879006
memset(a,0,sizeof(a)); //初始化为0
memset(a,127,sizeof(a)); //结果为最大值
memset(a,0x7f,sizeof(a)); //结果为最大值
memset(a,0xfe,sizeof(a)); //结果为最小值
memset(a,0x42,sizeof(a)); //结果为极大值,推荐
memset(a,0xc2,sizeof(a)); //结果为极小值,推荐
memset(a,255,sizeof(a)); //结果为NaN数
memset(a,0x3f,sizeof(a)); //结果为接近0的小数
9.关于double:你永远搞不清2个Int什么时候会出来个double,所以int运算后如果结果是double一定要在中间转一下!
e.g.(x*1.0)/(y*1.0)
10.组合数记得判断m,n的大小关系
11.去你大爷的多组输入(不好意思骂了脏话)
几种方法
while(cin>>x>>y)
while(~scanf("%d%d",&x,&y)
for(int x,y;~scanf("%d%d",&x,&y)