算法篇
数学
- EXCRT扩展中国剩余定理
- 用途: 求解线性同余方程组
- 主要过程: 将方程逐一合并, 最后使用 EXGCD扩展欧几里得算法 求出最后合并得到的方程的解.
EXGCD代码
ll Exgcd(ll a,ll b,ll &x0,ll &y0){
if(!b){
x0=1,y0=0;
return a;
}
ll x1,y1,d=Exgcd(b,a%b,x1,y1);
x0=y1;
y0=x1-a/b*y1;
return d;
- FWT快速沃尔什变换
- 用途: 加速 按位与,按位或,按位异或 等二进制位运算卷积
图论
- Kruskal重构树
- 用途: 无向图中两点之间路径上最大边的最小值 (或最小边的最大值)
- 主要过程: 在用 Kruskal算法 求最小生成树时, 对于被选中的边 (u,v), 新建一个节点 x, 并将 u,v 的父亲指向 x.
其他
for (int i = 0; i < n; i++)
for (int s = 0; s < 1 << n; s++)
if (s >> i & 1) sum[s] += sum[s ^ (1 << i)];
数据结构篇
小技巧
- 根号分块
- 用途: 在数据结构题里如果实在想不到怎么优化了可以考虑一下根号分块, 感觉是一个挺通用的东西.
- 注意事项: 要先想清楚暴力情况下是如何维护和查询, 再考虑优化, 不然很容易陷入思维循环.
- bitset 维护 DAG 可达性.
比赛篇
- 答题策略
- 先把每题的暴力分打完
- 从比较有思路的题开始, 从暴力一级一级的往上拿分.
- 不要着急思考正解, 可以从部分分的数据范围和特殊性质入手.
- 考试心态
- 专注. 专注于眼前的题目, 不要考虑其他题目, 也不要想别人的情况.
- 灵活. 保持思维的活跃, 理清楚每一步的思路, 不要陷入思维循环.
- 平静. 不要因为题目的难度或自己的状态而影响心态, 不在意结果, 就当做一次经历.
- 积极. 就算大块的分拿不下来也不要气馁, 把自己能拿的分都尽量拿到就好了.
- 仔细.
- 仔细看题, 不要误解题目意思, 注意数据范围, 注意细节特判.
- 仔细思考, 再三确认没有纰漏后再开始写代码.
- 仔细检查, 做好对拍工作, 注意数据范围.