GDOI2018前夕 错误总结

算法易错点

$FFT$

1.注意精度,以及是否取整

2.注意$complex$类不要写错,复数乘法是这样的:

complex operator *(const complex &b){return complex(x*b.x-y*b.y,x*b.y+y*b.x);}

splay

1.注意$get$写法

bool get(int pos){return ch[fa[pos]][1]==pos;}

2.注意rotate中son的写法,不要写错

void rotate(int pos){
	int f=fa[pos],ff=fa[f],son=get(pos);
//	cout<<"rotate "<<pos<<ends<<f<<ends<<ff<<ends<<son<<ends<<ch[pos][son^1]<<ends<<ch[pos][son]<<endl;
	ch[f][son]=ch[pos][son^1];
	if(ch[f][son]) fa[ch[f][son]]=f;
	fa[f]=pos;ch[pos][son^1]=f;
	fa[pos]=ff;
	if(ff) ch[ff][ch[ff][1]==f]=pos;
//	cout<<"finish rotate "<<ch[pos][son^1]<<ends<<ch[f][son]<<ends<<ch[f][son^1]<<ends<<fa[f]<<endl;
	update(f);update(pos);
}

3.insert函数执行过程中siz+1

序列$splay$

1.$getrank$函数要$push$

2.$revolve$操作注意模一下

3.静态查错!不要把变量名打错了(尤其是都是三个字母的情况)

莫队

1.注意卡一卡分块,像0.5,0.6,0.666666,0.7之类的都试一试

2.树上莫队可以把add和del合并,back和update合并(其实普通莫队也可以)

3.莫队真的可以过$1e5$的数据!!!

$KMP$

1.注意$fail$的意义:从1开始,表示长度

2.$getfail$写成函数更好

3.可以想想$fail$树

$AC$自动机

1.注意$getfail$的写法!!!仔细检查

2.$dp$的时候数组别开反了

3.各种空间开够,包括$bfs$队列、$AC$自动机本题,$dp$

4.如果直接暴跳$fail$有可能被卡掉,可以加$vis$标记,然后把信息下传

线性筛

1.记得标记$vis$

2.$\varphi\left(i\right)=1$,$i$为质数

3.推积性函数线筛法:考虑某个质因子增大1会发生什么

莫比乌斯反演

1.两条式子记住,更换枚举方式的时候注意各个函数和值,是分数还是整数的那一项

2.数据大用杜教筛

杜教筛

1.数论分块记得$i=j+1$,不是$i++$

2.$map$复杂度一般够用

3.注意$long long$

主席树

1.新树里面有旧的节点的时候(叶节点,因为写法问题)要加上旧节点的信息(所有的!)

2.合并的时候要注意当前节点是叶节点的情况(用$update$函数的写法)(来自zkw的教导%%%)

posted @ 2018-04-25 21:29  dedicatus545  阅读(302)  评论(0)    收藏  举报