赛前复习
打算看看自己学过 / 生疏了的知识点。
线性递推
把坑填完了
https://blog.csdn.net/jokerwyt/article/details/85345981
斯特林数
一类圆排列,二类集合划分
一类快速求:分治FFT
∏
(
i
+
x
)
\prod(i+x)
∏(i+x),乘x代表新建一个圆,乘i代表放某个数前面。据说还有一个log的做法,以后再学。
二类快速求:容斥有多少个空集。
1
集
合
数
!
∑
(
−
1
)
i
⋅
(
集
合
数
−
i
)
个
数
⋅
C
(
集
合
数
,
i
)
\frac 1 {集合数!} \sum (-1)^i \cdot (集合数-i)^{个数}\cdot C(集合数,i)
集合数!1∑(−1)i⋅(集合数−i)个数⋅C(集合数,i)
是一个卷积的形式,上FFT加速就可以了。
感觉斯特林反演不怎么常见,就先不看了。
单位根反演
看一次忘一次
[
n
m
o
d
  
k
=
0
]
=
1
k
∑
i
=
0
k
−
1
(
W
k
n
)
i
[n \mod k = 0] = \frac 1 k\sum_{i=0}^{k-1}(W_k^{~~n})^i
[nmodk=0]=k1∑i=0k−1(Wk n)i
其中Wk是%意义下的k次单位复数根,也就是
g
m
o
−
1
k
g^{\frac{mo-1}{k}}
gkmo−1
理解:
假如n是k的倍数,那么
W
k
n
W_k^{~~n}
Wk n在x轴上。
否则可以预见的是,对i取0~k-1时,
(
W
k
n
)
i
(W_k^{~~n})^i
(Wk n)i是一一对应,并且和为0的。
类欧
应该要会推的吧,记得是从1~n,并且开头要使得a,b<c
回文树
感觉自己并没有学过一样…
第一次知道回文树的根应该建成一个环。
无论是1做奇数根还是0做奇数根都没有关系。
记得除了偶数根,没有其他fail等于奇数根就行。
记得先求新点的fail再给last的转移赋值,这样不需要特判。
1做奇数根:
struct pam{
int c[N][26],fail[N],len[N];
char s[N];
int sz;
int tot, last, occ[N];
void init(){
len[tot = 1] = -1;
fail[0] = 1;
fail[1] = 0;
}
void extend(char cc) {
s[++sz] = cc;
while(s[sz] != s[sz - len[last] - 1]) last = fail[last];
cc -= 'a';
if (c[last][cc] == 0) {
len[++tot] = len[last] + 2;
int k = fail[last];
while(s[sz] != s[sz - len[k] - 1]) k = fail[k];
fail[tot] = c[k][cc]; //假如是0做奇数根要特判。
c[last][cc] = tot;
}
last = c[last][cc];
occ[last] ++;
}
} P;
border相关结论
这个内容和应用实在是太多了。一时抱佛脚也没有意义。
放到后期计划里面吧。
这次就祈祷他不考…
最近经常犯错误
- 变量名打错(从来都是需要debug的主要原因)
解决方法:每完成一个模块,花若干秒除错。打完之后,花1min~3min除错。
结束前15分钟check list
- 文件名,文件目录名是否正确(建文件的时候就copy,杜绝手打)
- 文件输出是否注释,是否能对样例输出正确答案到文件;
- 是否有未删除的调试输出(全文查找printf与cout)
- 以预计得分高到低的顺序,检查每一个数组是否开够。
预期
rk 30。
速题时间要严格规定。每题10分钟,总体50分钟为宜。
Day1
真的是打脸了。
队线150,我只有80…发挥严重失常 + 挂了40分。
纪中只有三个上了队线…看来是没有顺利切换到gdoi模式啊。
(这次时间仍然是4h,但是题目难度较去年大了)
就在我写完上面博客后的1h,下面酒吧开始蹦迪了…整个房间都在颤抖
这个宜尚酒店真的是辣鸡,打总台投诉,说没房间了只能自己找人拼。
最后凌晨两点实在顶不住了,以无比严厉的言辞吊了前台一顿,终于答应换房间了。(说好的没房间呢?????)
早上状态还好,没有特别困。
比赛过程就不说了。总结一下出现失误的地方:
- T2没拍,40分暴力丢了。(这题很多人没拍,都丢了)
- 剩下1h,我要抉择t3的20和t4的40。理了理思路写T4,结果上下界网络流只会嘴巴,实操完全GG…误以为辅助网络流的流量就是可行流流量。(事实上是T->S边的流量。)
结果就是这40和那20一起丢了…gg.
gd这种赛制还是不要搏一搏了吧,稳健拿暴力+对拍好了…
讲题
T1:四进制下的min/max卷积。
说人话:把max(ai,bi)<=ci的答案求出来,做高维差分即为max(ai,bi)=c的答案。再做高维后缀和即为max(ai,bi)>=c的答案。
T2:
考虑DAG拓扑序上,一条不经过某个点的路径特点:完全在其后,完全在其前,有一条边经过他。
预处理每个点向后能走多少,向前能走多少,然后再枚举每条边就可以处理了。
T3:
沙碧题
每一次组合,求这些颜色的点的虚树,扫上来求贡献,并用树状数组修改链并就可以了。
T4
最小费用可行流 + 处理负权,暂时不清楚怎么做
day2
一转眼人没了
T2 0了,GG
不过达成了rk30-的目标…
T1:库默尔+数位dp
T2:假装成几何题的dp题。利用dp转移的总数稀少进行加速。
T3:考场上yy了个sam上dp的60’做法。时间原因没有成功实现。(事实上并没有人提到?)
T4:lct维护树链以及子树信息 / 恶臭树剖维护答案式子。
总结
这次比赛很特别。感觉自己处于实力一个不上不下的尴尬境地。
- 暴力写挂,特别是无法对拍的部分 (过度依赖对拍)
- 一题都没切掉 (实力太低、临场估计不准)
- 4h不足以让我从容打完能拿的所有分 (码力不足,bug频发)
可能因为个人比较慢热吧。太快节奏的比赛不适应。
感觉这套题,换去年的我来打得分也差不了多少。
还有就是太嘴巴了。有些东西感觉口胡起来很简单,事实上并没有实操过。因此day1崩了。(上下界网络流)
总而言之,我觉得是太过专注于算法正确性本身(这当然也很重要),反而忽略了一些关键的思路,以及延伸应用。
当然也有一些值得以后借鉴的地方:(好像只有gdoi时间紧张…)
- 列各题已经做的部分分、可能会做的部分分
- 预估一个所需时间。并且尽量留出翻车后的容灾时间。
这场gdoi,基本上成功打出了我的下限ε=(´ο`*))
- 后面要重新重视模拟赛的“模拟”作用。即使比赛时间完全冗余也不能优哉游哉的边浪边打。要日积月累的训练代码能力。
- 然后对于没有思路的题,要及时总结缺失的知识点(包括不懂得熟练运用的),延伸拓展,做相关题目、查漏补缺。