易错点总结(考前)
trick
图论
-
求一颗树的连通块个数相当于求点-边的数量。ABC173F
-
选一个点,要求距离最大的点最小,选的是直径的中点,选
个就是直径上找 个(树网的核)。 -
重心到所有点的距离之和最小,与边权无关。
-
树上的区间操作考虑转为:dfs 序,bfs 序,欧拉序等,树上启发式合并也可以考虑。
-
传递闭包可以用 bitset 优化 floyd。
-
判断树上的两条路径是否相交,只用看两条路径的 lca 是否有一个 lca 在另一条路径上。
-
树上二分图最大匹配,贪心的知道:叶子结点与父节点匹配一定最优。
-
对于图中有关异或、奇偶的题,考虑建分层图,如果边是零就在本层建边,是一就向对层建边,最后统计在一层的点。
dp
-
树上 dp 要用 子树大小来缩小枚举范围,以达到优化时间复杂度的目的(小心写成
)。 -
有些 dp 转移可以变成偏序问题,可用数据结构较快的转移。
-
有些状压 dp 可以先预处理排除掉不合法的状态,这样枚举状态时会减少不少状态。
数据结构
- 对于要求求特定计算法则下的前
大区间,考虑用优先队列,每次取出最大的区间,并把区间分成两端再次放入优先队列中。(超级钢琴)
数学
-
。 -
,转化为:
其他
- 对于数据的分析(修改与查询要适配):
比如莫对维护 mex,莫对的修改为
如用 set 维护 mex,修改与查询的复杂度都为
如果用分块维护 mex,修改为
-
动态中位数用对顶堆。
-
对于二进制加减考虑延时进位,每次相加不进位,最后再从头扫一遍进位。
进位可以这么写:
void jw(int id,int pos)
{
a[id][pos-1]+=(a[id][pos]-(a[id][pos]&1))>>1;
a[id][pos]&=1;
}
- 回文串的循环节也是回文串
代码细节
-
不开
long long
见祖宗。 -
提交前一定检查数组是否开够,不要
const N
后就全部都开 。 -
freopen
写对了吗,一定要带文件测试,也可以直接用文件读入调试。 -
如果写快读,快读写对了吗,快读是否适配读入范围。
-
不太熟悉的运算优先级就打括号,一定不错(
==
先于&
)。 -
选择性压行,一般不要压行,有些写了很多次的模板可以适当压行。
-
检查空间大小。
-
一定要在 linux 下编译一遍代码。
-
多测要清空,时间富裕可以
memset
,不然用多少清. -
字符串处理时想清楚是
-'0'
,还是-'a'
(是数字还是字母)。 -
define int long long
尽量不用,如果实在不清楚也可以开。 -
并查集的两个优化都用时间才是常数级别,只用一个是
。 -
注意特判边界或特殊情况。
-
些暴力就不要想一些歪门的优化,这样增加代码量不说大概率也没用,还有可能写错。
-
平衡树的空间一定要多开点,询问要加点。
考试策略
-
10 分钟通读全题,20分钟细读全题(手算样例,不要读错题),思考一眼分并记录下来。
-
20 分钟思考 T1 正解,如果思考出来:40 分钟正解代码,写拍子。
如果没有思考出来,先思考 T2 10 分钟(可能 T2 比 T1 简单),写 T2 暴力(30 分钟)/写正解(1 小时)。
-
写 T4 ,T3 暴力,分尽量多(1 小时)。
-
T1 未作出来,写暴力,然后思考正解(T2 同理)。
-
如果遇到大模拟,先当 300 分满分做,如果有时间考虑写部分分(如果部分分很好写可以直接写(代码 70 行内))。
考试心态
-
一定不要上头,如果已经死磕了 30 分钟以上,就一定写暴力,就算后面想出来了还可以对拍,至少不在此题爆零。
-
写到一半做法假了,一定不要慌,把代码复制到新文件,不要删(可能有用),心里要想:至少在考试时发现而非考后,至少有暴力分。
-
不会就写暴力!不会就写暴力!不会就写暴力!暴力写了总不错。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战