常见一般错误
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++)//这里的!=不能写成<
- 用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,呜呜呜