NOI集训总结

算法篇

数学

  • 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 可达性.
    • 如果空间开不下还可以考虑分块进行.

---

比赛篇

  1. 答题策略
    • 先把每题的暴力分打完
    • 从比较有思路的题开始, 从暴力一级一级的往上拿分.
    • 不要着急思考正解, 可以从部分分的数据范围和特殊性质入手.
  2. 考试心态
    • 专注. 专注于眼前的题目, 不要考虑其他题目, 也不要想别人的情况.
    • 灵活. 保持思维的活跃, 理清楚每一步的思路, 不要陷入思维循环.
    • 平静. 不要因为题目的难度或自己的状态而影响心态, 不在意结果, 就当做一次经历.
    • 积极. 就算大块的分拿不下来也不要气馁, 把自己能拿的分都尽量拿到就好了.
    • 仔细.
      • 仔细看题, 不要误解题目意思, 注意数据范围, 注意细节特判.
      • 仔细思考, 再三确认没有纰漏后再开始写代码.
      • 仔细检查, 做好对拍工作, 注意数据范围.
posted @ 2020-08-16 10:02  BruceW  阅读(146)  评论(0编辑  收藏  举报