sb 错误
upd. 2020.11.29:今天刚想删了转到本地但是被评论感动了(
让带家见识一下我的 sb 程度((
- 判断形如 是否爆
int
/long long
时,不能只判断 ,要判断 ,因为 有可能是压死骆驼的最后一根稻草。 - 线段树节点要维护一大堆东西的时候,通常查询时返回节点,此时空节点与非空节点合并时不能想当然,要特判。
set
/map
等高级的 STL 容器一般很耗内存,ML 小的时候注意会不会爆,爆的话改成自己写的简单一点的 DS。- 不能因为答案在
long long
范围内就忘取模;模数不能抄错,如 抄成 或 。 - 一大堆
min
/max
/abs
时括号位置不能矬,可以用高亮检查。 - 不要胡乱将整型塞进有关 的浮点函数里,可能会玄学爆精度。
- 维护一堆操作的题,如果维护的时候需要用到操作数 ,那么不能
while(qu--)
而要for(int i=1;i<=qu;i++)
。 - 若 是一个指针,要将它位移 位的话,要写
it+(a-b)
而非it+a-b
,那样可能会越界。 - 尽量不要将多个相关的函数写进一个表达式里,这样运算顺序可能是 UB。
- 把
continue
写成break
/return
。 - 平衡树里上传时要更新
sz
而不能只顾更新其他信息。 - 看清楚数据范围,不要因为 同阶就认为它们相等,代码中写错变量上限而数组开小会 RE;或未注意到根据题意,数组大小应该是 或其他关于变量上限的式子,而直接写变量上限。
- 多测
memset
,爆零两行泪。 - 网格上的题要看清楚给定的是顶点坐标还是格子坐标。
- 开数组的时候把各数据范围弄混,如将
int a[N+1];
写成int a[X+1];
。 - 前缀和预处理时如果
i=0
则不能调用Sum[i-1]
,可以手动平移一位或特判;同时注意调用前缀和时的越界问题(理论上越界合法,值为 )。 - 快读不能忘了可能会有负数。
- 如果想退出多重循环,一个
break;
是不行的,只能退出一层。 - 如果算法要求某个数组有序,而且这个数组靠直觉看也应该是本身就是有序的,但是题目可能偏偏不保证有序,而样例却又都是有序的。这时需要排序。
- two-pointers 的时候,如果要对某个数组从大到小扫,那么「将此数组从大到小排序」和「从后往前扫」中只能恰好选一个,如果两个都选就负负得正了。
- 手写队列、栈等时,
head
/tail
/top
的++
/--
是前置还是后置要想清楚。 - 没有逆元。讲大一点就是如果一个运算有或没有逆运算那还好说,如果在值域里面有些值可逆,有些值不可逆,那就要当心了。
- 多测清空的最终目的是让每一次跑都如同第一次一样。有的时候光清空解决不了问题,比如下一个点依赖于上一个点的某些数据,而你却把它修改了,这时要还原。所以要把
//remember to clear
改成//remember to make it first
。 - 注意极端数据(边界)。
- 循环变量重复定义(
-Wall
也不会提醒),可能导致看似的灵异事件。比如处在一个很大的for(i)
里面而忘记这层大循环,在里面循环变量也从i
开始。 - 忘判无解。
- 带有减法和取模的题,最终不能忘了把答案转成非负数。
min
/max
的两个参数类型千万不能不相同,可能在某些编译器下通过,但在最终评测编译器下就会悲惨的 CE。- 混淆。
- 单调队列最好先
push
再pop
,否则可能新加进来需要被pop
的元素。 - 逻辑运算符 & 位运算符优先级。
- 尽管离散化后值域大小等于 ,但如果中途改变了 ,值域大小可就不再等于 了。
- 有时候循环内部调用
a[i-1]
并且循环从 开始,这时候虽然大多数时候因为a[0]=0
不会有问题,但有的时候就是会冲突,不能欠考虑。 - 下标从 开始还是从 开始?
- 中间结果爆
ll
而输入输出不会爆。 - 一个待输入变量还没输入就调用。
- 全局变量和局部变量重名,不会报错,但是会调到怀疑人生。(和第 25 条原理相似)
- 初始化函数写了一定要调用啊………………
1<<x
中若 会爆int
,要写1ll<<x
。- 通常对值域为 的东西,会使用零值来表示没有值。但有的时候值域为 ,这时候用 就会出现错误,需要用 。甚至有的时候值域会是 ,这时候要用 。
- 离散化忘记
unique
,只sort
,这样正确性没影响,但是数据一大就会 T。 - 浮点转整型以及整型下的除法都是向零取整,如果想要下取整要分类讨论,如
toint
函数应该写int(x+sgn(x)*.5)
instead ofint(x+.5)
。 - 负值跟某些我们希望是
signed
的unsigned
(如v.size()
)作比较会自动转成unsigned
而出错,这时应该把式子里所有unsigned
都强转成signed
。 - 不会用
memset
就不要乱用(指填 size 处)。 - 数据有时会保证在 1e9 以内,并且要求对 998244353 取模,此时要注意到 ,需要手动取模(但是 1e9 + 7 不会出现这样的问题/px)。
珍爱生命,远离抄袭!
分类:
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?