那些年,我犯过的错

常见一般错误

1. f r e o p e n freopen freopen敲错了
2.数组开小,喜获 R E RE RE
3.数组直接开穿,喜获爆0 M L E MLE MLE
4.循环里 i , j i,j i,j不分
5. i i i和1分不清(一 d e de de就是半小时)
6.没有输入 n n n就直接调用了
7.在那些像老太太的洗脚布那样又臭又长的代码中,我成功把变量名打错了
8.莫名其妙被调用函数卡常(这玩意复杂度这么可怕吗)
9.乘法加1ll啊!!!!!!不然就会出现 w a , r e wa,re wa,re等奇奇怪怪的错误,然后 d e de de一天【微笑】
10.开 s t l stl stl的时候一定要明确用的是什么类型啊,不然会很惨
11.在无限输入的时候不能写while(1)!!!!!!!!!!!!!!!
…………&&%&()*()血的教训,一定要把输入写到while里
12.符号打错了o(╥﹏╥)o
13.开不开long long 一定要想清楚!!如果遇到模数,加法不用,乘法用,没有模数,一定考虑最坏情况(不开long long 见祖宗)
14.考场上没用freopen试大样例
15.全排列的格式写错了,多写了一个 d f s ( t o t ) dfs(tot) dfs(tot),超时,以后不能写啊
16.输入一个数同时使用了,会出错,如

scanf("%d%d",&id,&sum[id]);

17.小括号加的太少了,炸 i n t int int
18. i f ( x ) if(x) if(x)表示 x ! = 0 x!=0 x!=0,不表示 x > 0 x>0 x>0,还我的分!!!
19.被 m e m s e t memset memset卡到T,果然——要慎用
20.先清零了,然后再进行运算,我是憨批【留下开心的泪水】
21.题目中说了"先到先得",竟然还没排序,直接爆0,麻了
22. 当数组开在函数里面的时候初值不为0,必须赋初值
23. 声明变量的时候,不加 c o n s t const const是无法用在数组里的,也就是下面这样是不行滴

int x=10;
int a[x];

24.多组数据有变量没请0
25.我写了一个连等式判断。。。。
26.用freopen测大样例的时候没开拓展名
27.不开代码较多警告
28.又一次,在dfs的时候sort了,然后没sort回去!!啊啊啊啊啊
29.千万不能复制大样例了,如果没复制全,就是4个半小时!!!!
30.当T的时候也可能是数组开小了,导致re,死循环。。。。(啊啊啊啊啊 )
31.改long long的时候记得所有有关的都改了,比如const int
32.也许long long 在乘的时候会爆,用龟速乘或者__int128
33.数组名字重复,导致开小了,re
34.二进制的位,如果没有特殊说明的话,都是从右往左来的,20分的教训(泪目了)
35.n和Q傻傻分不清楚【哭】
36.就算用了这个数组,但是和代码本身没什么关系,也不能开小,不然会占别的数组的位置,就WA!

关键字

s i z e , n e x t , m a p , r a n k , q u e u e , s t a c k , h a s h , x 1 , y 1 , x 2 , y 2 ( 之 类 ) , size,next,map,rank,queue,stack,hash,x1,y1,x2,y2(之类), size,next,map,rank,queue,stack,hash,x1,y1,x2,y2(),

DP

1.区间dp中间点的循环 i , j i,j i,j带不带 = = =搞不清
2.循环起始点01分不清,要考虑赋值情况
3.注意初值的设置,看题目中的数据会不会出现负数
4.计算时/是下取证,带不带等号要考虑清楚

图论

1.判断 y y y有没有走过的时候,标记放在了循环外面
注意:用 y = = f a y==fa y==fa f [ y ] f[y] f[y]判断的时候,都应该放在循环里面,不能在函数刚开始标记: f [ x ] = 1 f[x]=1 f[x]=1
2. s p f a spfa spfa判环的时候判成负环了,应该看当前这条路径上的点有没有超过n
3.在求 l c a lca lca的过程中改变一些值,但是先改变了 y y y,才赋值,然后成功没赋上【微笑】
4.在sort完之后没恢复,依然按照原来的边的编号给边重新赋值,然后成功错了【啊啊啊啊】
5. t a r j a n tarjan tarjan l c a lca lca的时候没有特判询问时 x = y x=y x=y的情况,血的教训啊o(╥﹏╥)o
6.dij板子写错了,应该把 i f ( f [ y ] ) c o n t i n u e if(f[y]) continue if(f[y])continue放到刚开始取堆顶的时候: i f ( f [ x ] ) c o n t i n u e if(f[x]) continue if(f[x])continue
7.题目的连边方式一定要看清啊
8.漂亮,spfa板子也写错了,看我能不能把最短路板子错个遍。判断是否入队的时候,应该是只有被更新 的才能入队
9.链式前向星数组写习惯*2了,要视情况而定!!!!50分啊o(╥﹏╥)o
10.基环树的找环代码忘了怎么写了,之前的东西要多总结复习!!!
11.dij中间return 了,结果队列没清空。。。。
12.最大流是while(bfs())
13.拆点的时候数组不变(o(╥﹏╥)o)
14. LCA板子没写t,de了30分钟【微笑】

字符串

1. h a s h hash hash不要懒,写个 v e c t o r vector vector比写一堆 h a s h hash hash都强啊
2.30的数组开成15,竟然一堆wa?!,没有re
3. 30的数组开成1e5,在memset的时候疯狂TLE
4. h a s h hash hash在用线性探测的时候,模数要开大一点,不然就会一直碰壁到 T T T o(╥﹏╥)o
5. 题意理解不清啊,本质不同指的是子串的长度或者有一个字母不同,30分飞了
6.sam建树的时候尽量用基数排序,dfs常熟较大,可能会被卡(被卡掉20分的在这里)
7.字符串hash的模数取131是最合适的,13他死了,没错,死了

S T L STL STL

1.用 v e c t o r vector vector二分的时候没有 s o r t sort sort,麻了麻了
2.在判断一个元素有没有出现过的时候,显然,用 s e t set set的无重复性质要比 v e c t o r vector vector二分快很多(没错,和上一点是一道题)
3. s e t set set的复杂度是比 b i t s e t bitset bitset低的,别犯傻(少了20分,血的教训)
4.在 s e t set set中二分查找直接写 i t = S . l o w e r _ b o u n d ( x ) it=S.lower\_bound(x) it=S.lower_bound(x)就行了,不能写两端点啊,不然会T
5.遍历 s e t set set中的元素的时候,必须写成如下形式:

for(it=s.begin();it!=s.end();it++)//这里的!=不能写成<
  1. 用vector排序的时候,必须写成
bool cmp2(const vector<int> &x,const vector<int> &y)

不然会T【笑】

线段树

1. t [ p ] . l t[p].l t[p].l和传进来的 x x x分不清,de了1小时以上,麻了,还是理解的不太到位
2.当又有加又有乘的时候,每次传递的时候 a d d , s u m , m u l add,sum,mul add,sum,mul都要乘
3.明明数很大,change里写的是 i n t int int
4. 没开4倍空间!!笑死
5. 当进行重载运算符的时候,ask函数里尽量不用ans存着,而是分三种情况直接return

数论

1.0的阶乘逆元等于1啊喂!!!!!
2.求原数逆元,我写了个求阶乘逆元【微笑】
3.p是个偶数,一直处理不好,麻了
4. c e i l ( x ) ceil(x) ceil(x)这个函数要求 x x x必须是 d o u b l e double double型,如果是整数,一定要乘1.0啊!!!
5. 高斯消元,判断解的情况时是(r<=n) ,因为正常来说是r=n+1,因为n次循环,每次r++,而r初值是1,不要写错啦
6. 高斯消元的 p y py py设了个 i n t int int
7. 递推求期望的时候一定要想好初值,看需不需要再+1
8. 整除分块,n小不一定保证n/(n/l)小,取min肯定不错
9. 整除分块里的除法不能取逆元,因为目的就是约掉
10.当指数要乘起来,但是可能爆的时候,千万不要先把指数乘起来求逆元,是不对的,应该这样

int ans=ksm(ksm(x,y),z);

如果真的想,那么应该%(p-1)

int mi=1ll*y*z%(p-1);
int ans=ksm(x,mi);

11.在高斯消元的时候,如果保证有解,就不要加continue那行,说不定很小的数就被continue了(不然把py开到1e-100也行,只要不怕爆哈哈哈哈)
12.在一个东西*mu的时候,不要贸然+p,要不就判断一下,要不就到最后再%p+p%p,否则会炸!!!!!!!!

位运算

1.该用 l o w b i t lowbit lowbit函数的时候不用,写个 l o g 2 log2 log2,以后不能要,会T
2.异或的结果和顺序无关,不用全排列啊【o(╥﹏╥)o】
3.位运算结果太大爆int的时候一定要开long long 不然会re,如

1ll<<x;

数据结构

1.CDQ分治中,一旦用了w[]数组,那么!!原数组的顺序就变了(de了2小时的惨痛经历)
2.动态点分治中,用辅助数组的时候千万不能一直开vector,不然会T,要用auto
3.使用并查集的时候,判断连通性,最后每个点的祖先并不是fa,因为有些fa可能没有经历get的过程,所以判断的时候要取get,呜呜呜

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值