一些错误
一、比较致命的错误
都是可能会导致
1.状压或搜索中,如果当前数组只更新了
2.在函数中,一定要检查好某个变量是局部变量还是全局变量。防止某个全局变量被误认为是局部变量,而导致它的数值错误。
3.如果感觉空间不够,一定不要冒险将数组开得太大,因为一旦超空间可就一分没有。有一题,理论上暴力是20分,但空间只给了128MB,而20分的数据是1e8级别的。如果空间有所舍弃,开成1e7,能拿10分;而如果空间开1e8硬刚,能拿0分。
4.
5.开二维数组不要把大小开反。
6.仔细算清楚了到底需不需要开
7.取模不要把模数写错,尽量算一步模一次,不要爆int/long long
8.看清楚要输出什么。例如,看清
9.读题分清楚子序列,子串,不要因为这个浪费时间。子序列不一定连续,而子串是连续的。
10.在写形如
11.如果某个题写出了正解,一定不要懒,要自己造大数据验证一下!有的时候小数据说明不了任何问题!
12.
13.不能使用的变量名或函数名:
14.使用左移右移符号时,①如果运算结果不在
15.在线性求积性函数时,一定要先求出函数值,再求前缀和。如果求函数值的同时求前缀和,会影响到后面的函数值!
16.在对序列求最大值的时候,如果序列中有负数,那么一定要把
17.在实数运算时,不要写
二、关于特判
这部分如果没有考虑到,可能只会丢
1.自环和重边。
2.考虑只存在一个点,没有边的情况。这个比较重要,而且常被忽略。
3.图是否连通。
4.考虑模数为
5.在写区间问题的时候,如果是自己造出了一个区间,一定要考虑是否存在区间为空,即
三、具体的错误
一、线段树
1.支持区间加,区间推平的线段树的
void push_down(int u,int ul,int ur){
int mid=(ul+ur)>>1;
if(p[u].lazy2){
p[p[u].l].w=(mid-ul+1)*p[u].lazy1;
p[p[u].l].maxn=p[p[u].l].minn=p[u].lazy1;
p[p[u].r].w=(ur-mid)*p[u].lazy1;
p[p[u].r].maxn=p[p[u].r].minn=p[u].lazy1;
p[p[u].l].lazy1=p[p[u].r].lazy1=p[u].lazy1;
p[p[u].l].lazy2=p[p[u].r].lazy2=1;//这句话必须写在if里边,而不是外边!!!
}
else{
p[p[u].l].w+=(mid-ul+1)*p[u].lazy1;
p[p[u].l].maxn+=p[u].lazy1;p[p[u].l].minn+=p[u].lazy1;
p[p[u].r].w+=(ur-mid)*p[u].lazy1;
p[p[u].r].maxn+=p[u].lazy1;p[p[u].r].minn+=p[u].lazy1;
p[p[u].l].lazy1+=p[u].lazy1;p[p[u].r].lazy1+=p[u].lazy1;
}
p[u].lazy1=p[u].lazy2=0;
}
注释的那句话不能在
二、AC自动机
在
//if(p[k].end)这个if一定要去掉!!!
while(t){
++ans[p[t].end];
t=p[t].fail;
}
因为每扫到一个节点就要遍历所有的
三、分块
1.特判
2.在写区间查询有多少个数大于某个特定值时,不要忘记将初始的数排序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】