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:一开始要除gcd,记得中途退出的情况。之后记得要找最小的正整数解。
- 多次剩余(模数质数):求出原根,再bsgs求指数,求个逆元即可。
-
第一类斯特林数可以考虑直接展开递推式分治NTT求,也可以用ln、exp求圆排列的EGF的几次方。
-
第二类斯特林数:
容斥式:\(s[n][m]=\frac{1}{m!}\sum_{i=1}\binom{m}{i}*(-1)^{m-i}*i^n\)
自然数幂拆下降幂:\(n^m=\sum_{i=1}^m \binom{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:注意判质数那里不要随机出0为根,后面没有关系。
斯特林反演
矩阵树
min_25
类欧
五边形数(记不得就打表找规律)
数据结构:
treap
https://www.luogu.com.cn/record/34501298
记一下自随机函数的参数。
其它:
2-sat
上下界网络(费用)流
注意有源汇中,T->S中的流量才是实际流量,而费用的统计可以通过每条边费用流过流量+费用下界流量来算。