GDOI 2020 赛前反思

  • 照例是要开这篇博客的。

今年稳一点混进省队是(应该)没有问题的吧,A队的话因为联赛挂了60分有点难度,就随缘吧,只要进了省队就好了。

留个坑,做完最后四场模拟再来填注意事项。


杂想:

从初一玩到高一的4h4T 的GDOI终于成了历史,现在是全新的4.5h3T的统一省选,去年也去SH参加了十二省联考,但今年是CCF组织的或许又有些不同,不管题目如何,做好自己就行了。

不知不觉间就成为了高二老年选手,离AFO也就这么一两月的时间,站到这里才觉得压力有点大,高一时侥幸拿了Ag,现在的政策下还有学上(不过谁也不知道明年会怎么样,jyb不在乎竞赛这么点人的利益的),对于那些没有拿过Ag、Au的OIer来说,压力也许更大吧。

注意事项:

  • 文件夹、读入输出文件名

  • 空间限制,有没有CE(函数名冲突),看清编译指令

  • 仔细读题,发现暴力都拿不了分时,一定要看看是否是看错了;读完后最好算一算小样例。

  • 拍拍拍,而且不能完全信赖对拍,可以出小数据、特殊数据,暴力最好写多个(要写个最裸的)。

  • 卡思路上厕所,清醒一下

  • 30分钟注意,20分钟决策,10分钟必须停手。

  • 敬畏题目,不去想自己能切几题,尽力即可,不会就看部分分。


算法复习目录:

字符串:

KMP、SAM:

http://codeforces.com/contest/914/problem/F

这一题复习了三个算法,血赚。

就是类似NOI那题的分块,设阈值(M=sqrt 1e5)(>M)的串暴力KMP,小于的最多经过两个块,整块内的建SAM直接查,散块和块与块之间暴力KMP。

当然更加简单的做法是bitset,即对每个字符存当前位置的bitset,把可能的起点and起来,求区间1的个数即可。

  • KMP :next从2开始,可能要把s[|s|+1]=-1(母串)之类的。

  • SAM : 写完后可以输出子串看看,但是dep赋错了可能看不出来,多测清空一定注意写个函数,全部清了最好。

  • bitset:求区间$[x,y]$1的个数可以(>>x)-(>>y),清空是reset()(可以开个空的赋过去也行),1的个数是count()。

最小表示法:

  • 扫一扫,注意不匹配时(k=0)

https://www.luogu.com.cn/record/34419524

SA:

https://www.luogu.com.cn/problem/P4094
一题复习两个算法一个套路,血赚。
肯定选后缀,试一试就会发现b的限制很难受,二分Ans之后,就相当于后缀在一个区间里,。
然后常规的height、ST表、主席树即可。

  • SA : s[0]和s[1]赋成-1,cmp有越界风险,所以把暂存rank的数组的后一位赋成0。

AC-Autonmation:

https://loj.ac/submission/837516

这题就是套了个矩阵乘法,因为一次可能+1或者+2,所以需要把存2n的dp状态,相应的转移矩阵就是2n2n的。

  • AC自动机 : 标记沿fail链传递。

manacher:

https://www.luogu.com.cn/problem/P4199

这题是FFT后强行套了个manacher。

  • manacher 写上i-r[i]>0&&i+r[i]<=2*n+1会比较好。

回文树:

https://www.luogu.com.cn/problem/P5685

用回文树做这题是真的败家;

  • 回文树:fa[q] = son[getfa(fa[p])][c];son[p][c] = q;不能写反。
  • 回文树: 除了0和1,其实儿子编号一定比父亲打(不同于SAM)

exkmp:

https://www.luogu.com.cn/problem/P5334

神题。

从做左往右枚举前缀,保留可能的后缀(即在lcp=小的一方的长度的最小的那些)。

发现可能的还是有(O(n))的,但如果有(|j|<|i|<2*|j|),发现不管后续是什么,后缀(j)一定不会更优。

于是优化到(O(log))个。

每次判断谁更优可以预处理exkmp的next数组。

  • exkmp:自我匹配2的预处理,从3开始推,匹配其它是1的预处理,从2开始推。

数论:

excrt
exlucas

https://www.cnblogs.com/coldchair/p/13068338.html

  • excrt:该模的地方都要模,c2-c1可能是负数,要取回正,下面这个可能没问题,如果longlong级别要用黑科技乘。
void merge() {
	ll t = gcd(m1, m2);
	m2 /= t;
	if((c2 - c1) % t != 0) return;
	ll a = inv(m1 / t % m2, m2) * ((c2 - c1) / t % m2 + m2) % m2;
	c1 = a * m1 + c1;
	m1 = m1 * m2;
}
  • exlucas,可以卡常,就是那个地方是1或者-1,就不用快速幂了。

cipolla
扩展BSGS

  • cipolla:记式子即可。
  • 扩展BSGS:一开始要除gcd,记得中途退出的情况。之后记得要找最小的正整数解。
  • 多次剩余(模数质数):求出原根,再bsgs求指数,求个逆元即可。

斯特林数

  • 第一类斯特林数可以考虑直接展开递推式分治NTT求,也可以用ln、exp求圆排列的EGF的几次方。

  • 第二类斯特林数:
    容斥式:(s[n][m]=frac{1}{m!}sum_{i=1}inom{m}{i}*(-1)^{m-i}*i^n)
    自然数幂拆下降幂:(n^m=sum_{i=1}^m inom{n}{i}*i!*s[m][i]=sum_{i=1}^m n^{i↓}*s[m][i])
    自然数幂拆上升幂:(n^m=sum_{i=1}^m n^{i↑}*s[m][i]*(-1)^{m-i})

单位根反演
([k|j]=frac{1}{k}sum_{i=0}^{k-1} w_k^{ij})

pollard-rho

  • pollard-rho:注意判质数那里不要随机出0为根,后面没有关系。

斯特林反演
矩阵树
min_25
类欧
五边形数(记不得就打表找规律)

数据结构:

treap
https://www.luogu.com.cn/record/34501298
记一下自随机函数的参数。

KD-tree

其它:

2-sat
上下界网络(费用)流
注意有源汇中,T->S中的流量才是实际流量,而费用的统计可以通过每条边费用流过流量+费用下界流量来算。

原文地址:https://www.cnblogs.com/coldchair/p/13131793.html