我犯过的脑瘫错误
普通错误
cdq分治:
w h i l e 写 成 i f while写成if while写成if w h i l e 和 双 游 标 里 面 忘 写 i + + , 导 致 死 循 环 while和双游标里面忘写i++,导致死循环 while和双游标里面忘写i++,导致死循环
整体二分:
二 分 边 界 l o w = = h i g h 不 加 r e t u r n ; ∗ ∗ ∗ 每 次 都 忘 ! ! ! ! ∗ ∗ ∗ 二分边界 low==high 不加 return ; ***每次都忘!!!!*** 二分边界low==high不加return;∗∗∗每次都忘!!!!∗∗∗ 忘 写 n O p = n P o s + n Q 忘写 nOp = nPos + nQ 忘写nOp=nPos+nQ 没 更 新 o p [ i ] . k − = c n t 没更新 op[i].k -= cnt 没更新op[i].k−=cnt 在 进 行 对 树 状 数 组 或 线 段 树 清 空 操 作 时 , o 1 写 成 o p 在进行对树状数组或线段树清空操作时,o1写成op 在进行对树状数组或线段树清空操作时,o1写成op 树 状 数 组 的 边 界 值 搞 错 了 , 很 重 要 这 个 树状数组的边界值搞错了,很重要这个 树状数组的边界值搞错了,很重要这个 二 分 终 止 条 件 s t > e d 不 等 号 写 错 , 导 致 输 出 始 终 是 初 始 值 , 犯 了 好 几 次 了 二分终止条件st>ed不等号写错,导致输出始终是初始值,犯了好几次了 二分终止条件st>ed不等号写错,导致输出始终是初始值,犯了好几次了
树状数组:
p s q ( ) 不 r e t u r n r e s ; psq() 不 return \ res; psq()不return res;
线段树
a d d 函 数 中 最 后 面 忘 写 t r [ u ] . s u m + = t r [ u ] . l e n ∗ t r [ u ] t o A d d ( 标 记 永 久 化 版 ) add函数中最后面忘写 tr[u].sum += tr[u].len * tr[u]toAdd(标记永久化版) add函数中最后面忘写tr[u].sum+=tr[u].len∗tr[u]toAdd(标记永久化版)
费用流:
EK中的SPFA:
数 组 未 初 始 化 , 记 得 有 4 个 数 组 初 始 化 数组未初始化,记得有4个数组初始化 数组未初始化,记得有4个数组初始化 p r e 数 组 要 紧 接 d s t 更 新 之 后 更 新 pre数组要紧接dst更新之后更新 pre数组要紧接dst更新之后更新 有 一 些 数 组 未 更 新 有一些数组未更新 有一些数组未更新
手写模板:
优先队列:
两 个 b r e a k 写 成 c o n t i n u e 导 致 T L E 两个break写成continue导致TLE 两个break写成continue导致TLE
数学:
阶乘:
0 ! = 1 , 其 逆 元 也 是 1 0!=1,其逆元也是1 0!=1,其逆元也是1
其他:
注 意 不 要 盲 目 地 套 模 板 , 根 据 题 目 的 不 同 , 还 是 要 稍 微 改 变 一 下 的 , 有 一 些 细 节 的 变 量 名 , 容 易 出 错 注意不要盲目地套模板,根据题目的不同,还是要稍微改变一下的,有一些细节的变量名,容易出错 注意不要盲目地套模板,根据题目的不同,还是要稍微改变一下的,有一些细节的变量名,容易出错 l 写 成 1 l写成1 l写成1 函 数 名 不 写 , 只 写 ( x , y , z . . . ) 函数名不写,只写(x,y,z...) 函数名不写,只写(x,y,z...) l o w e r _ b o u n d 要 求 数 组 升 序 , 若 要 降 序 , 在 最 后 加 上 g r e a t e r < s t r u c t > ( ) lower\_bound要求数组升序,若要降序,在最后加上greater<struct>() lower_bound要求数组升序,若要降序,在最后加上greater<struct>() 位 运 算 不 加 括 号 位运算不加括号 位运算不加括号 数 比 较 大 的 时 候 记 得 写 一 个 乘 号 写 一 个 取 模 , 特 别 是 逆 元 这 种 会 达 到 模 数 上 限 的 东 西 数比较大的时候记得写一个乘号写一个取模,特别是逆元这种会达到模数上限的东西 数比较大的时候记得写一个乘号写一个取模,特别是逆元这种会达到模数上限的东西
玄学错误
cdq分治:
w h i l e ( i < = m i d & & q [ i ] . y < = q [ j ] . y ) a d d ( q [ i ] . z , q [ i ] . c n t R p t ) , + + i ; while( i <= mid\ \&\&\ q[i].y <= q[j].y )add(q[i].z,q[i].cntRpt),++i; while(i<=mid && q[i].y<=q[j].y)add(q[i].z,q[i].cntRpt),++i; 和 和 和 w h i l e ( i < = m i d & & q [ i ] . y < = q [ j ] . y ) a d d ( q [ i ] . z , q [ i + + ] . c n t R p t ) ; while( i <= mid\ \&\&\ q[i].y <= q[j].y )add(q[i].z,q[i++].cntRpt); while(i<=mid && q[i].y<=q[j].y)add(q[i].z,q[i++].cntRpt); 结 果 是 不 一 样 的 , 或 许 时 语 法 特 点 结果是不一样的,或许时语法特点 结果是不一样的,或许时语法特点
浙公网安备 33010602011771号