近期省选题思路整理

「过难」的定义是目前洛谷上通过人数 19/20 年 100 左右(或更少),18 年 200 左右(或更少)的黑题 (因为早年题做的人多)

「过水」的定义是我不用思考就直接会做的题目

「过偏」的定义是考察点大概率不会出现/过于奇葩,没有做的意义的题目

标记了 AC 的题目代表写了代码;没标的代表没写代码,只是看了思路

因为众所周知 AH 是山区 /cy,所以太难的题目就不做了(

每道题目的关键思想/算法加粗。

2020

2019

  • P5279 [ZJOI2019] 麻将 过偏(dp 套 dp)
  • P5280 [ZJOI2019] 线段树
    P6630 [ZJOI2020] 传统艺能
  • P5281 [ZJOI2019] Minimax 搜索 过偏(动态 dp)
  • P5283 [十二省联考 2019] 异或粽子 AC
    使用堆对于每一个右端点,维护左端点的集合。
    每次取出一个数以后进行区间分裂,只会增加至多 1 个区间,因此堆中的元素个数保持 O(n) 级别。
    对于区间的异或最大值,可以使用可持久化 trie 树来维护。
  • P5284 [十二省联考 2019] 字符串问题
    后缀排序以后很显然需要建图,因为是区间往点连边的形式,所以需要使用线段树优化建图。
    但是因为有长度的限制,所以可以根据长度,将线段树改造为可持久化线段树优化建图,套用线段树优化建图的方式即可。
    代码太长了 /tuu
  • P5285 [十二省联考 2019] 骗分过样例 过偏(看数据找规律) /youl
  • P5286 [HNOI2019] 鱼
    完全口胡,计算几何应该不会考吧。
    枚举 D,其他点极角排序。
    枚举 A,双指针求出鱼尾的数量。
    因为 BCAD,所以把 BC 按照斜率分类,每一类再按照中点分类,终点必须在 AD 上。
    鱼身和鱼尾相乘后相加,×4 得到答案。
  • P5287 [HNOI2019] JOJO
    考察对 KMP 的深层次理解
    可持久化可以离线下来变成回退。
    每次增加一段字符的时候,其实就是要从之前最后一个字符开始跳 nxt 跳到一个位置后面有连续 yc
    因为 c 不等于之前最后一个字符,所以如果跳到了一段中间的话是肯定没有用的。
    所以定义 nxti 表示从第 i 个字段的最后一个点开始,一直跳 KMP 的 nxt,跳到的第一个位于某个字段末端的点。
    每次跳 nxti 时,考虑:
    如果当前字符串存在周期,那么跳到所有周期的第一个。
    否则,直接跳到 nxt
    不难发现每次操作都使得长度 /2,复杂度 O(nlogn)
  • P5288 [HNOI2019] 多边形 过难
  • P5289 [十二省联考 2019] 皮配 AC
    观察到阵营和派系的安排其实是独立的,对于没有限制的学校可以分别 DP 后乘起来。在 O(nm) 的复杂度内得到两个一维数组。
    对于有限制的,因为个数很少,所以可以对阵营和派系分别设计维度来二维 DP。这部分是 O(kM2) 的,稍微卡一下上界就是 O(k2sM) 的。
    最终合并统计答案。
  • P5290 [十二省联考 2019] 春节十二响 AC
    对一棵子树求解时,开的段数肯定是深度个。
    使用堆启发式合并两棵子树的答案,因为每次合并都会少一个点,总复杂度是 O(nlogn) 的。
  • P5291 [十二省联考 2019] 希望 过难
  • P5292 [HNOI2019] 校园旅行
    首先考虑一个简单的 O(m2) 的 DP,也就是用 f(u,v) 表示 u,v 之间是否存在一条合法路径,转移显然。
    考虑减少边数
    对于一个同色连通块,如果是二分图,那么保留一棵生成树就行了;否则找一个点连一条自环。
    将同色连通块缩点后,剩下的连接异色的边必然是二分图,保留一棵生成树即可。
    于是就把边数压到了 O(n2) 的级别。
  • P5293 [HNOI2019] 白兔之舞 过偏(多项式 + 单位根反演)
  • P5294 [HNOI2019] 序列 过难
  • P5300 [GXOI/GZOI2019] 与或和 AC
    对于求“全 1”一类的矩阵可以考虑单调栈
    使用单调栈维护矩形即可。
  • P5301 [GXOI/GZOI2019] 宝牌一大堆 过偏(大 D P)/youl
  • P5302 [GXOI/GZOI2019] 特技飞行 过难
  • P5303 [GXOI/GZOI2019] 逼死强迫症 AC
    枚举两个 1×1 的矩阵就会发现中间的方案唯一。
    答案形如 Ans(x)=i+jxF(i)F(j)
    矩阵优化转移。
  • P5304 [GXOI/GZOI2019] 旅行者 AC
    看到最短距离可以考虑枚举一个中间边然后把最短路拆开。
    正反跑两遍 Dijkstra,分别染色。
    枚举中间边求答案即可。
  • P5305 [GXOI/GZOI2019] 旧词
    将操作离线下来按照 x 排序。
    每次插入一个点 u 时,把 u 到根的路径上每个点权 +(depk(dep1)k)
    询问的时候查 u 到根的权值和即可。
    树链剖分随便维护。
  • P5319 [BJOI2019] 奥术神杖 AC
    乘积类型的东西明显炸 long long 的,很可能是ln 以后变成求和。
    最大化 1ci=1cw 是经典的 0/1 分数规划问题。
    多串匹配惯例使用 AC 自动机
  • P5320 [BJOI2019] 勘破神机 过偏(多项式)
  • P5321 [BJOI2019] 送别 过难
  • P5322 [BJOI2019] 排兵布阵 过水
  • P5323 [BJOI2019] 光线
    一种做法是合并玻璃,等效替代;另一种做法是设方程组然后递推。
  • P5324 [BJOI2019] 删数
    不难抽象为数轴上 v 这个点立着一根长为 cntv 的木棍,修改即是移动任意一个单位长度。
    答案很明显就是所有木棍倒下来后,空位置的个数。
    整体操作使用平移原点的方法。
    因此可以使用线段树维护。
  • P5326 [ZJOI2019] 开关 过偏(生成函数 / FWT)
  • P5327 [ZJOI2019] 语言
    给定树上若干个点,求其最小斯坦纳树:先假定加入 u1=1,把给定的点按照 DFS 序排序,答案即为 i=1kdep(ui)i=2kdep(LCA(ui1,ui))dep(LCA(u2,u3,,uk))
    使用线段树维护的话,叶子节点 tag=0/1 代表其被不被选,辅助维护某一段区间的第一个 1 的位置和最后一个 1 的位置即可。
    对于链的修改可以树上差分,继承信息直接线段树合并
  • P5328 [ZJOI2019] 浙江省选 过难
  • P5329 [SNOI2019] 字符串 过水
  • P5330 [SNOI2019] 数论
    模意义下的数一般要考虑其周期性
    考虑枚举 A,预处理 kP+bmodQ 下的循环情况,前缀和优化即可。
  • P5331 [SNOI2019] 通信
    点数不多,所以考虑使用费用流。
    优化建图可以使用累加权值之差的方式。
  • P5332 [JSOI2019] 精准预测
    生、死作为两种对立的状态,考虑 2-SAT 模型
    接下来使用 bitset 压位,求出一个 T+1 时刻的生点能到达几个 T+1 时刻的死点即可。
  • P5333 [JSOI2019] 神经网络 过难
  • P5334 [JSOI2019] 节日庆典 过难
  • P5337 [TJOI2019] 甲苯先生的字符串 过水
  • P5338 [TJOI2019] 甲苯先生的滚榜 AC
    平衡树维护一个 pair,按照题目说的模拟就行了。
  • P5339 [TJOI2019] 唱、跳、rap和篮球 AC
    几个点作为一个整体计数的问题可以考虑把他们缩成一个点来看。
    二项式反演的一种形式:f(k)=i=k(ik)g(i)g(k)=i=k(1)ik(ik)f(i)
    k 个同种颜色的 EGF 是 fk(x)=i=0kxii!,卷起来表示带标号乱序插入,就可以得到答案。
  • P5340 [TJOI2019] 大中锋的游乐场 AC
    按照两者的差值分层跑最短路即可。
  • P5341 [TJOI2019] 甲苯先生和大中锋的字符串
    建出 SAM,统计每个结点的 |endpos|,然后对于所有大小为 k 的结点,将其代表的长度区间 +1 差分维护即可。
  • P5342 [TJOI2019] 甲苯先生的线段树 过难
  • P5358 [SDOI2019] 快速查询
    本质不同的询问并不多,所以可以把实际用到的下标存起来离散化。
    对于每一个位置维护一个加法标记和一个乘法标记,单点赋值的时候解方程赋一个适应当前标记的等价值即可。
  • P5359 [SDOI2019] 染色 过难
  • P5360 [SDOI2019] 世界地图 过难
  • P5361 [SDOI2019] 热闹的聚会与尴尬的聚会 AC
    题目的要求其实就是 p,q 都尽可能大。
    对于第一问,每次删去图中度数最小的点并更新答案即可。
    对于第二问,最大独立集是 NP 的,但这题并不是一定要求最大的,只要尽量大即可。
    于是考虑两问的联系,每次找度数最小的点加入独立集,并把它周围点都删掉。
    因为每次至多删掉 p 个点,所以 qnp+1
    注:一般最大独立集问题的随机做法:随机一个排列然后从前往后贪心选点。
  • P5362 [SDOI2019] 连续子序列 过偏(找规律)
  • P5363 [SDOI2019] 移动金币 AC
    阶梯 Nim 游戏的先手必胜条件:从末端开始编号 0,1,2,3,要求 a0a2a40
    于是这题考虑枚举每一个比特位出现的次数(偶数次),做一个类似背包的 DP 即可。
  • P5371 [SNOI2019] 纸牌
    注意到等价性,如果 (x1,x,x+1) 出现超过了 3 次,则完全可以理解为 3(x1)+3x+3(x+1)
    所以 fi,j,k 表示前 i 种牌,有 j(i2,i1),额外还有 k(i1),有意义的状态 j,k<3
    这种轮廓线 DP 的思想也很常用,使用矩阵快速幂优化空档转移即可。
  • P5372 [SNOI2019] 积木 过偏(纯构造,也没啥人写)
  • P5411 [SNOI2019] 网络 过难
  • P5412 [YNOI2019] 排队 过水
  • P5413 [YNOI2019] 骑单车 过水
  • P5414 [YNOI2019] 排序 过水
  • P5415 [YNOI2019] 游戏
    概率 DP 可以考虑列出各量之间的关系,然后高斯消元求解。

2018

  • P4337 [ZJOI2018] 线图 过难
  • P4338 [ZJOI2018] 历史 过偏(LCT)
  • P4339 [ZJOI2018] 迷宫 过难
  • P4363 [九省联考 2018] 一双木棋 AC
    博弈问题中,如果一方想最大化某值,另一方想最小化某值,可以考虑 Min-Max 对抗搜索
    而优化 Min-Max 对抗搜索的常用方法就是记忆化
    这题状态压缩的方法很巧妙,以后可以考虑用构造全 0 基量中插入 1 的方式来状压。
  • P4364 [九省联考 2018] IIIDX
    最小化/最大化字典序,一般都是从 1 开始贪心
    每个位置放有机会放的最大的数,同时把剩下那部分预留起来。
    预留的实现可以是线段树维护前缀个数 min,修改变为单点修改,查值则是线段树二分
  • P4365 [九省联考 2018] 秘密袭击 过偏(多项式 + 线段树合并 + 整体 DP)
  • P4382 [八省联考 2018] 劈配
    对于第一问,依次加入第 k 志愿的边后在残量网络上跑 Dinic,如果存在增广路了就退出
    对于第二问,二分答案 mid,将前 mid 个人按照最优方案建图,然后加入第 i 个人理想的边,跑 Dinic 即可。
    多次建图的复杂度过高,可以直接把前 i 个人的最优情况的残量图都存下来
  • P4383 [八省联考 2018] 林克卡特树 过偏(wqs 二分/带权二分/DP 凸优化)
  • P4384 [八省联考 2018] 制胡窜 过难
  • P4424 [HNOI/AHOI2018] 寻宝游戏 AC
    二进制位运算考虑逐位分析
    把操作中的 也看作 0/1 的话,发现,令操作串代表的数为 opt,则每一位都是一个 optxopt>x 的不等式。
    解这个不等式,解的个数就是答案。
  • P4425 [HNOI/AHOI2018] 转盘
    观察到,如果一个点被访问了两次及以上,那么第一次访问毫无意义。
    也就是,可以理解为,在起点等待一段时间,然后完整地走一圈。
    破环为链,枚举起点 i1in),Ans=maxij<i+n{Tj(ji)}+(n1)
    Ans=(n1)+maxij2n{Tjj}+i
    于是使用线段树维护单调栈,这是经典的楼房重建模型
  • P4426 [HNOI/AHOI2018] 毒瘤
    普通树的独立集 DP 就是看 u 选还是不选,f(u,0)=f(v,0)+f(v,1);f(u,1)=f(v,0)
    接下来枚举每一条非树边是 (0,0) 还是 (1,0) 还是 (0,1),注意到 (0,0)(0,1) 是可以合并的,那么就直接枚举上侧点选不选了,时间复杂度 O(2mnn)
    每次跑 n 个点的 DP 是很浪费时间的,所以把关键点拉出来建虚树,预处理出转移式中的系数,复杂度就是 O(2mn(mn)) 了。
  • P4427 [BJOI2018] 求和 AC
    k 很小,而且不带修,那么对每一种 k 分别预处理,查询时倍增即可。
  • P4428 [BJOI2018] 二进制 过难
  • P4429 [BJOI2018] 染色 过难
  • P4436 [HNOI/AHOI2018] 游戏 AC
    门一定是单向的,所以图肯定构成一个 DAG,拓扑排序后依次继承式扩散区间,即可把时间复杂度降到 O(n)
  • P4437 [HNOI/AHOI2018] 排列
    容易得知的性质是形如“选了 fa(i) 下一个一定会选 i”,所以每次贪心将 fa(i)i 合并即可。
    至于先选哪个数,使用邻值交换法推导即可。
  • P4438 [HNOI/AHOI2018] 道路 AC
    因为 dep40,干脆把 x,y 设计到状态里
    接下来对于每一个 u 讨论翻修他下方的哪条路,做一个小 DP 即可。
    这题竟然卡空间,要动态开空间/yun
  • P4454 [CQOI2018] 破解 D-H 协议
    原根P 互质。
    求解 gxA(modP) 可以考虑使用 BSGS
  • P4455 [CQOI2018] 社交网络
    求有向图以 1 为根的叶向树形图的个数。直接上 Matrix-tree 定理就好了。
    Tleaf=Det(Lin),Troot=det(Lout)
    理解:叶向树形图就是每个点选一条入边构成生成树,根向树形图就是每个点选一条入边构成生成树。
  • P4456 [CQOI2018] 交错序列
    消元是一个好思想,也就是把 xny 表示。
    一般来说,指数很小的时候要尝试把指数设计到状态里面
    然后就是简单的矩阵优化 DP 了。
  • P4457 [BJOI2018] 治疗之雨 题目没看懂 /yun
  • P4458 [BJOI2018] 链上二次求和
    将答案化为二次函数的形式,使用线段树每个位置维护二次函数a,b,c 值即可。
    注意看清题目有没有保证 lr……
  • P4459 [BJOI2018] 双人猜数游戏 过难
  • P4460 [CQOI2018] 解锁屏幕
    n 很小,考虑状压,哈密顿路径式 DP,枚举下一个点的时候加一个限制条件即可。
  • P4461 [CQOI2018] 九连环
    n 连环的最小步骤是 2n+13
    高精度 FFT /jk
  • P4462 [CQOI2018] 异或序列 AC
    看到异或,求前缀和,然后使用莫队维护区间内每种异或值的个数就行了。
  • P4491 [HAOI2018] 染色 过偏(二项式反演 + NTT)(希望 CCF 考纲是真的
  • P4492 [HAOI2018] 苹果树 AC
    树上距离和可以转化为考虑每一条边被经过的次数。
    P 不是指数的时候可以尝试把 阶乘除阶乘 改成 组合数乘阶乘 的形式。
  • P4493 [HAOI2018] 字串覆盖 过难
  • P4494 [HAOI2018] 反色游戏 过偏(圆方树)
  • P4495 [HAOI2018] 奇怪的背包
    首先模意义下要寻找循环节,物品 v 在模 P 意义下可以等价为 gcd(v,P)
    同理,询问也可以进行等价。所以每次询问就是询问有多少种选若干个数的方案使得 gcd=w
    于是就可以将 P 质因数分解

    根据这张著名的表知道,本质不同的询问只有 103 级别种,分别预处理即可。
  • P4500 [ZJOI2018] 树 过难
  • P4501 [ZJOI2018] 胖 过偏(找性质题)
  • P4502 [ZJOI2018] 保镖 过难
  • P4516 [JSOI2018] 潜入行动
    经典的树形背包,用 f(u,i,0/1,0/1) 表示 u 这棵子树中选了 i 个,u 这个点选没选,u 这个点有没有被覆盖到,方案数。
    树形背包尽量使用上下界优化,也就是无意义状态要割干净,时间复杂度就是 O(nk) 的。
  • P4517 [JSOI2018] 防御网络 过难
  • P4518 [JSOI2018] 绝地反击 过偏(计算几何 + 二分 + 扫描线 + 网络流)
  • P4557 [JSOI2018] 战争 过偏(怎么 JSOI 两道计算几何)
  • P4558 [JSOI2018] 机器人 过难
  • P4559 [JSOI2018] 列队
    看到处理与坐标关联的问题,可以考虑使用权值线段树来维护。
    而这题还有标号的限制,故需要增加一个维度,也就是可以按照标号将权值线段树可持久化
    一段区间如果全部向右/全部向左就可以直接计算,否则递归。
    显然这样拆分出来的区间个数也是 log 级别的。
  • P4561 [JXOI2018] 排序问题
    一个关于期望的小结论:每次操作完全相同且随机,成功需要的次数 =1/ 单次操作成功的概率
    包含相同的元素的排列个数 =n!cnti!
    最大化下面那个东西其实就是在一个阶梯形的数组上贪心填充。
  • P4562 [JXOI2018] 游戏
    问题求的 t(p) 其实就是 p 中最后一个“不可以被别人筛掉的数”的出现位置。
    埃氏筛法可以 O(nloglogn) 求出上述数字的个数,然后枚举答案算方案数分别求和即可。
    坑:后 nans 个数也是要乱序排列的!以后一定不能只关心重要部分而漏算了其他部分的贡献
  • P4563 [JXOI2018] 守卫
    看到斜率很容易想到凸包或者单调栈,但是这样就错了(
    对于所有区间都进行询问的题目可以考虑固定 lr,移动另一个指针来维护答案。
  • P4577 [FJOI2018] 领导集团问题
    树上 LIS 问题,可以考虑类比序列 LIS 问题的做法,对每一个节点开一个 multiset fu
    首先不考虑 u 本身,fu=fv
    接下来考虑 wu,因为 multiset 中本质是维护“当答案为 x 时的最大转移要求(因为这题是 LDS)”,那么把 wu 插入到 fu 中后,除非 wufu 中最小的一个,否则把 wu 的前一个迭代器删除就好了。
    f 之间的合并要使用启发式合并,时间复杂度是 O(nlog2n) 的。
  • P4578 [FJOI2018] 所罗门王的宝藏 AC
    解若干个 x+y=z 的方程可以拆成 x+yz,x+yz,标准化后使用差分约束算法即可。
  • P4579 [FJOI2018] 邮递员问题 过难
  • P4588 [TJOI2018] 数学计算 AC
    线段树维护这个操作过程,无非是两种操作:单点赋值,全局乘积。
  • P4589 [TJOI2018] 智力竞赛
    求 DAG 的不可交链覆盖:拆点 + 二分图匹配。
    求 DAG 的可相交链覆盖:Floyd 传递闭包,u 能到达 v 则连边 uv 建新图,在这个 DAG 上求不可相交链覆盖。
    最小值的最大值……二分答案
  • P4590 [TJOI2018] 游园会 过偏(DP 套 DP)
  • P4591 [TJOI2018] 碱基序列
    经典 DP 分段问题,直接 fi,j 表示前 i 个字符划分出前 j 个字符串就行了。
    至于转移,可以 hash 预处理。
  • P4592 [TJOI2018] 异或
    子树的查询是 naive 的,直接按照 DFS 序建一棵可持久化 0/1 trie 就行了。
    链的查询则比较巧妙,我们按照从根到 u 的路径的顺序建可持久化 0/1 trie(也就是 version u 的上一个版本是 version fa(v)),查询的时候就查 su+svslcasfa(lca) 即可。
    经典例题是 P2633 Count on a tree,只不过这题是主席树。
  • P4593 [TJOI2018] 教科书般的亵渎
    转化为求自然数幂和的问题。
    S(n)=i=1nik 是一个关于 nk+1 次多项式
    拉格朗日差值法,暴力计算 S(1)S(k+1) 即可,有 f(x)=i=1cyijixxjxixj
  • P4605 [SDOI2018] 物理实验 过难
  • P4606 [SDOI2018] 战略游戏 过偏(圆方树)
  • P4607 [SDOI2018] 反回文串 过难
  • P4618 [SDOI2018] 原题识别 过偏(虽然是紫题,到现在 AC 人数还不到 100……)
  • P4619 [SDOI2018] 旧试题
    关于约数个数的经典结论d(xy)=i|xj|y[gcd(i,j)=1],以及它的多元推广形式 d(i=1nxi)=ik|xk1p<qn[gcd(ip,iq)=1]
    三元组计数问题可以考虑联想三元环计数,无向图的三元环计数的做法是将边由度数较小的点连向度数较大的点,复杂度是 O(mm)
  • P4620 [SDOI2018] 荣誉称号
    看到 x2k 可以联想到满二叉树上的 k 级祖先,于是不难发现按照 depmodk 分类,这些层的先在模意义下应当是相等的,所以可以对前 k 层 DP。
    预处理代价复杂度不应和 n 有关,可以递推 “全部修改为 m 的倍数” 和 “全部修改为 m+1 的倍数” 之间的关系。
posted @   syksykCCC  阅读(504)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
历史上的今天:
2020-04-03 Codeforces 1332E Height All the Same
点击右上角即可分享
微信分享提示