我犯过的脑瘫错误

普通错误

cdq分治:

w h i l e 写 成 i f while写成if whileif w h i l e 和 双 游 标 里 面 忘 写 i + + , 导 致 死 循 环 while和双游标里面忘写i++,导致死循环 whilei++

整体二分:

二 分 边 界 l o w = = h i g h 不 加 r e t u r n ; ∗ ∗ ∗ 每 次 都 忘 ! ! ! ! ∗ ∗ ∗ 二分边界 low==high 不加 return ; ***每次都忘!!!!*** low==highreturn; 忘 写 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 线o1op 树 状 数 组 的 边 界 值 搞 错 了 , 很 重 要 这 个 树状数组的边界值搞错了,很重要这个 二 分 终 止 条 件 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(标记永久化版) addtr[u].sum+=tr[u].lentr[u]toAdd

费用流:

EK中的SPFA:

数 组 未 初 始 化 , 记 得 有 4 个 数 组 初 始 化 数组未初始化,记得有4个数组初始化 4 p r e 数 组 要 紧 接 d s t 更 新 之 后 更 新 pre数组要紧接dst更新之后更新 predst 有 一 些 数 组 未 更 新 有一些数组未更新

手写模板:

优先队列:

两 个 b r e a k 写 成 c o n t i n u e 导 致 T L E 两个break写成continue导致TLE breakcontinueTLE

数学:

阶乘:

0 ! = 1 , 其 逆 元 也 是 1 0!=1,其逆元也是1 0!=11

其他:

注 意 不 要 盲 目 地 套 模 板 , 根 据 题 目 的 不 同 , 还 是 要 稍 微 改 变 一 下 的 , 有 一 些 细 节 的 变 量 名 , 容 易 出 错 注意不要盲目地套模板,根据题目的不同,还是要稍微改变一下的,有一些细节的变量名,容易出错 l 写 成 1 l写成1 l1 函 数 名 不 写 , 只 写 ( 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_boundgreater<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); 结 果 是 不 一 样 的 , 或 许 时 语 法 特 点 结果是不一样的,或许时语法特点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值