GDOI2019赛前反思

照例每次大赛前要开这篇博客来总结的。

最近的模拟赛打的和shit一样,但是别人的省选成绩还行?好像都进队了。

对了,GDOI这么毒,4h4题,不能以正常的思维来想

估计今年的题肯定要比去年的day1、2甚至day3还要难,首先去年的题整体偏水,day3的话思维难度低了点,毕竟是拼题OI嘛。

而且今年只有两天,名字直接改成了GDSOI,这是不是预示难度要回到两年前那种不到十个人切题?

应该也不至于,毕竟有100人左右,签到题还是要给的,只不过没有那么水了。

4h4题时间分配是很重要的,以我这种想半天想不到,想到只能过样例的人来说,估计要有选择的放弃题。

但是不管题目怎么样,每题都要分配一定的时间,万一调了题目难度顺序或者有欺诈题呢?


模拟赛中和改题中和以前曾经犯的问题:

1.没想清楚开打,或者想了一个比较劣的东西不去换个想法。
想题时想到了,没在草稿纸上写下来,结果写的时候很自然的忘了写或写错了。

2.仔细读题,发现暴力都没得写时,一定要怀疑自己看错题了,且看完题不要着急过,试一试小样例。

3.文件名问题,空间问题,编译成不成功问题,注意栈空间,-O2,-std=c++11,和头文件有没有少,宏定义有没有产生bug

4.一定要拍,写完后先肉查,模拟题就狂造小数据,数据要有极限(树的要有链),和构造数据。

5.实数精度问题,和double和long double的时间问题,实数二分姿势

6.卡思路上厕所,清醒一下,但是时间可能会很赶,可以跑吧?

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

8.作息10:30上床,7:00起床(肯定要赖的啦),中午考虑一下睡不睡午觉吧

9.警惕非常规题,感觉我不擅长,但是也要尽力拿分。

10.大数据是精心构造的让你过的数据,但我觉得有了心里稳了很多,还是得拍。

11.最后,GDOI真NM毒,不过还是得敬畏(暴膜)出题人和他们的题目的。


算法复习目录:


字符串:

1.ac自动机:https://loj.ac/problem/3089
BJOI2019裸题,10亿过1s,全靠梦想

没BFS:任何操作都要bfs,因为fail[x]可能>x
标记要沿着fail树传,这次做了

【SCOI2012】喵星球上的点名
看这题很久了居然不会做。

首先把名字串的AC自动机建出来,考虑在每个名字和姓名间加特殊符然后丢进去跑。
假设我们记录了经过的点,现在就是要求这些点到根的路径的并集经过的结尾点数。
似乎只能用bitset暴力做,发先利用的虚树的思想可以很好的解决。
点按dfs序排序,Ans=每个点的答案-相邻两个的lca的答案。

2.SA
模拟赛写了,没有写错,但是有找到了一个bug

3.SAM
模拟赛写过板去做暴力

4.manacher
因为复习所以题目不是很难。
http://acm.hdu.edu.cn/showproblem.php?pid=4513

裸的,要不下降的话特判一下即可。

想了想以前的写法有问题:
应该是i-r[i]>0&&i+r[i]<=n

5.exkmp
https://ac.nowcoder.com/acm/contest/73/D
做完后发现直接hash就行了
大概正反做两次,然后差分来给区间打标记就行了

算法主要注意求nt时从3开始,后面从2开始,j=max(mx-i+1,0)

6.最小循环同构
就是那个几行的扫描

int calc(char *s, int l) {
    int i = 1, j = 2, k = 0, t;
    while(i <= l && j <= l && k <= l) {
        t = s[i + k] - s[j + k];
        if(!t) k ++; else {
            if(t > 0) i = i + k + 1; else j = j + k + 1;
            if(i == j) j ++; k = 0;
        }
    }
    return i < j ? i : j;
}

好吧可以用exkmp代替的。

还需理解理解,现在能证明它是对的,没有办法推出来,强行记忆。

7.回文树:
http://codeforces.com/problemset/problem/932/G

这题有点难了,牵扯到字符串一系列理论。

首先转换成s[1]s[n]s[2]s[n-1]……就相当于求划分成偶数回文串的方案数。

容易想到回文自动机暴力dp,但是当数据是aaaaa……时就变成 O ( n 2 ) O(n^2) O(n2)

注意到border和回文串有一个性质,可以划分成log段等差数列,证明不展开。

f [ i ] f[i] f[i]表示划分字符串前i个的方案数。

那么设 g [ x ] g[x] g[x]表示回文树上x号点,跳fail,跳到是等差数列的最后一个点,这期间的f[i-len[x]]的和。

考虑增量插入后g的变化,对于跳等差数列的每个端点x,画个图不难发现g[x]就是由原来的g[fa[x]]加上当前等差数列那个长度最小的,前提是fa[x]和x在一个等差数列里。

等差数列中间的g[x]不变,不在la的fail链上的g[x]虽然意义上应该是0,但是我们不用管,反正不会有影响,给以后用就好了。

回文树写的时候注意在这里插入图片描述的顺序。

看起来似乎反过来也没有关系,但是注意gf(s,n,fa[p])是可以跳到p的,应当是p=1时,这时就fail=自己,以后死循环了。


数论&&数学:

1.高斯消元&&线性基:

实数的主要就是精度问题,有模数的当然最好。

发现有很多猎奇的卡精度方法,但是似乎不同的题目表现不一样?(大雾)

中心思想就是小变大,防止出现除着就趋近于0的情况,往1划就对了。

ps.回消的好写

异或可以bitset,线性基记个性质

2.特殊数
*斯特林数
卡特兰数
五边形数
默慈金数

3.定理和算法
剩余.
Lucas
cipolla
bsgs
Miller-Rabin和Pollard-Rho
min_25
单位根反演
矩阵树定理.
dillworth定理
burnside和polya
扩展欧拉定理
库默尔定理
mobius反演相关、杜教筛
类欧只会f

4.容斥

5.生成函数

6.多项式
FWT


数据结构:

treap
KD-tree
圆方树


规划:

二元关系.
2-sat

搜索:

A*
α-β剪枝

你可能感兴趣的:(总结)