NOI2025 赛前做题记录 - 6 月(下)
由于笔者水平能力有限,难以避免有行文错误,若您在垂阅本人拙作时发现阙漏,还望您批评并加以斧正,谢谢!为此给您带来的不便本人在此深表歉意。
Universal Cups
The 2nd UCup Stage 22: Zhengzhou
J. Balance in All Things
考虑到奇数层状态数是 \(\mathcal{O}(n^2)\) 的,偶数层是 \(\mathcal{O}(n)\) 的,所以转移数量是 \(\mathcal{O}(n^3)\) 的,预处理一下这个可爱的转移系数就可以做到 \(\mathcal{O}(kn^3)\) 了。
The 2nd UCup Stage 23: Shanghai
C. Equal Sums
面多加水,水多加面,时间复杂度 \(\mathcal{O}(n^3)\)。
JOI Open
JOI Open 2025
JOI Open 2025 A. Bubble
这个题咱还不会 w
JOI Open 2025 B. Lottery
这个题咱还不会 w
JOI Open 2025 C. Telepathy
这个题咱还不会 w
HT-NOI
HT-052-NOI
HT-052-NOI A. 最长不下降子序列
枚举选的 \(0\) 和 \(2\) 的个数,\(1\) 的个数就是两个前缀和的差的 \(\min\),树状数组维护前缀最大值即可,时间复杂度 \(\mathcal{O}(n\log n)\)。
HT-065-NOI
好简单的 w
开场发现 C 做过,是咱最喜欢的 JOISC 鱼 2 qwq
看完 B 10s 会了,这不是我们国家集训队的那个 wqs 二分最小生成树经典题吗 qwq
然后 A 题把最短路 DAG 建完随便做做就过了喵(x
HT-065-NOI A. 地铁换乘 / ROI 2017 Day 1 T4. Путешествие в Метрополис
你把最短路 DAG 建立出来,然后在上面对于每一小段斜率优化就好了,但我笨笨的,我写了李超线段树,卡了卡空间才过了,时间复杂度 \(\mathcal{O}((n+m)\log n)\)。
HT-065-NOI B. 生成树 / LOJ566 yanQval 的生成树
考虑 \(n\) 是奇数,发现就是选出一棵最小生成树,再选择 \(\dfrac{n-1}{2}\) 条边赋上 \(1\) 的系数,剩下的赋上 \(-1\) 的系数,最大边权和。
然后 wqs 二分一下就做完啦!
\(n\) 是偶数也大差不离的,我就不讲了。时间复杂度 \(\mathcal{O}((n+m)\log n\alpha(n))\)。
HT-065-NOI C. 猫 / JOISC 2022 鱼 2
这个是经典题,我懒得讲了,时间复杂度 \(\mathcal{O}((q+n)\log^2n)\)。
HT-066-NOI
懒得写比赛过程,因为没认真打。
HT-066-NOI A. 删数
答案的下界为 \(\sum |a_i-b_i|\),猜想可以取到,事实也确实如此。
我从前往后扫,从后往前扫,再从前往后扫,再从后往前扫,接着我再从前往后扫,再从后往前扫,如果操作能够匹配上就操作,然后就过了,复杂度不会证。
HT-066-NOI B. 递增
这个题咱还不会 w
HT-066-NOI C. 环形
这个题咱还不会 w
云斗 NOI 2025 模拟赛
云斗 NOI 2025 模拟赛 #3
开场发现 B 做过,然后 A 差不多会了,想 C。
在两个半小时的时候回去把 A 写了,然后发现 C 蠢了,直接做就好了,然后 AK 了。
云斗 NOI 2025 模拟赛 #3 A. ins
考虑把操作倒过来考虑,发现我们只需要关心目前哪些相邻的段被“纠缠起来”(即逆排列的所有下降点),一开始我假的主要原因是没有注意到“合并”可以并行,后来我发现 \(2\) 次操作可以筛选 \(4\) 个数,就会了!
所以区间 dp,记 \(f_{i,j,k}\) 表示前 \(i\) 次操作“合并”了 \([j,k]\) 段的最小代价,每次转移枚举间断点即可,时间复杂度 \(\mathcal{O}(n^3k)\)。
云斗 NOI 2025 模拟赛 #3 B. tree
算出每个点期望以它为起点的操作次数 \(f_i\) 以及每个点到它的平均距离 \(g_i\),\(g\) 可以换根 dp 求出,\(f_i\) 可以用鞅论导出或者是稀疏矩阵高斯消元得出,时间复杂度 \(\mathcal{O}(n\log P)\)。
使用 O(1) 求逆元即可做到线性。
云斗 NOI 2025 模拟赛 #3 C. median
考虑给定的数字将数域划分为了若干个区间(两个相邻点之间的左开右开段),那么不合法当且仅当存在一个段使得其中元素个数大于 \(n-k-\) [#该区间内元素个数] 再加上 \(k\) 个数中位于其前缀的数的个数。
容易发现这样的段至多只有一个,枚举是哪个段之后容斥即可,但是每次暴力求和是 \(\mathcal{O}(n^2)\) 的。式子写出来,欸这不是我们 LNOI 盒吗?考虑使用两个指针类似莫队扫描一下维护即可,但是这里移动量总和是线性的,所以总时间复杂度 \(\mathcal{O}(n)\)(视 \(n,m,k\) 同阶)。
云斗 NOI 2025 模拟赛 #4
开场半个小时会了 B,然后给 C 写了 50 暴力。
会了 A,但是好累啊,不想写了。
云斗 NOI 2025 模拟赛 #4 A. color
这个题咱还没写 w
云斗 NOI 2025 模拟赛 #4 B. sort
套路性的转 \(01\),发现合法当且仅当对于当前状态 \(S\),除了最后的 \(\operatorname{popcount}(S)\) 位,前面的位中 \(1\) 的个数不超过 \(k\)。
状压 dp 就好了,优化复杂度可以使用状态延迟计算的技巧,比如记现在插入了 \(i\) 个数,有 \(j\) 个在尾巴上,dp 的时候考虑新加入的一位以及一个数的位置就好了,复杂度 \(\mathcal{O}(nk)\)。
实际上求的是一个带状矩阵的快速幂,可以用 poly 相关技巧做到 \(\mathcal{O}(k^2+k\log k\log n)\)。
云斗 NOI 2025 模拟赛 #4 C. ds
这个题咱还不会 w
梦熊 NOI 2025 苍穹计划模拟赛
梦熊 NOI 2025 苍穹计划模拟赛 #28
咱状态稍微恢复了点的说~
hhoppitree 开场大概会了 A,咱用 Kruskal 重构树做做就好了~然后 hhoppitree 发现了一个关键结论唔,就是答案一定不会超过 \(3\)(超大声
然后私分讨了 3 个小时有余就过了(开心 w
这个时候咱想不出来 C,给 C 写了个乱搞,卡了 2 个小时还是没过,最后获得了 \(50\) 分w。
梦熊 NOI 2025 苍穹计划模拟赛 #28 A. 树上均衡路径
考虑将大根小根点权 Kruskal 重构树分别建出来,那么一条路径 \((x,y)\) 合法就相当于 \(x\) 在 \(y\) 的子树内(第一棵),\(y\) 在 \(x\) 的子树内(第二棵)。
ps: 顺序什么的好烦啊喂,可能写反了(((
然后你就边 dfs 边上个数据结构(比如树状数组)维护一下就好了,时间复杂度 \(\mathcal{O}(n\log n)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #28 B. 前缀后缀和 / UOI2023 An Array and Partial Sums
关键结论:答案不超过 \(3\)。
答案是否为 \(1\) 是好判的,可以证明一定可以通过操作整个序列完成。
找到前缀和最小的位置 \(x\) 和最大的位置 \(y\),如果 \(x\le y\),那么对于 \(x\) 的后缀前缀和一下,再对于 \(y\) 的前缀后缀和一下即可。
如果 \(x>y\) 就全局乘上 \(-1\),此时 \(x\) 和 \(y\) 会互换,所以答案一定不超过 \(3\)。
接下来只要考虑答案是否为 \(2\)。
有全局取反的情况先特判了,接下来本质不同的只有操作两次前缀和操作以及一次前缀和和一次后缀和操作。
两次前缀和操作的情况,可以证明必然存在一种方案使得第一步操作的是某个前缀,枚举一下就好了。
否则,记 \(a\) 的前缀和为 \(s\),\(s\) 的后缀和为 \(S\),\(a\) 中最后一个后缀和小于 \(0\) 的位置是 \(p\),那么一次操作 \([l,r)\) 合法当且仅当 \(r>p\) 且 \(\forall l\le i<r,s_n-s_{r-1}-s_{l-1}(r-i)+S_i-S_r\ge0,\forall 1\le i<l,s_n-s_{r-1}-s_{l-1}(r-l)+S_l-S_r+s_{l-1}-s_{i-1}\ge0\)。
后面那一项可以对于每个 \(l\) 求出最小的 \(\mathit{pre_l}=s_{l-1}-s_{i-1}\),那么由于 \(s_n-s_{r-1}\ge0\),所以可以把限制泛化为 \(\forall l\le i<r,-s_{l-1}(r-i)+S_i-S_r\ge0\) 以及 \(-s_{l-1}(r-l)+S_l-S_r+\mathit{pre}_l\ge0\),虽然不加这一步也可以但是这样好写。
然后斜率优化一下算出符合限制的最优的 \(r\) 就好了,时间复杂度 \(\mathcal{O}(n\log n)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #28 C. 最小差
这个题咱还不会 w
梦熊 NOI 2025 苍穹计划模拟赛 #29
开场发现 A 做过,然后发现 C 在讲课中听过。
然后发现 B 随便做做就过了,然后 AK 了。
梦熊 NOI 2025 苍穹计划模拟赛 #29 A. 重心 / CF1827D Two Centroids
发现每次挂一个叶子后重心至多只会移动一条边,用你喜欢的数据结构维护即可,时间复杂度 \(\mathcal{O}(n\log n)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #29 B. 红与蓝 / CF1266H Red-Blue Graph
*3400?*2800!
发现给每条红边的权值设个元就可以得到 \(n\) 个方程,由于每个点都能到达 \(n\) 号节点,由矩阵树定理知矩阵满秩。
然后每次询问对应的矩阵相同,可以提前求逆,注意为了判断答案是否是分数需要对两个不同的大质数取模。
类似判欧拉回路一样,最后还要判个点之间的可达性,时间复杂度 \(\mathcal{O}(n^3+qn^2)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #29 C. 子序列 / AGC048F 01 Record
把原 01 串反过来,并且每次从前到后贪心取出一个极大的子序列 \(a\),我们有结论 \(b\) 合法当且仅当(设 \(a,b\) 单调不升):
- \(\sum a=\sum b\);
- \(\sum\limits_{j=1}^{i}\left\lfloor\dfrac{b_j}{2}\right\rfloor\le\sum\limits_{j=1}^{i}\left\lfloor\dfrac{a_j}{2}\right\rfloor\) 对所有 \(i\) 都成立;
- \(\sum\limits_{j=1}^{i}\left\lceil\dfrac{b_j}{2}\right\rceil\le\sum\limits_{j=1}^{i}\left\lceil\dfrac{a_j}{2}\right\rceil\) 对所有 \(i\) 都成立。
直接从大到小 dp 即可,有用的状态数是 \(\mathcal{O}(n^3\log n)\) 的,前缀和优化即可做到 \(\mathcal{O}(n^3\log n)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #30
开场发现 A 见过,然后 B 是个数据结构,重了一场没冲出来,最后 100 + 70 + 5。
梦熊 NOI 2025 苍穹计划模拟赛 #30 A. 赤 / AGC 051 E Middle Point
求出原点集的凸包,顶点和凸包边上的情况都是好处理的;否则,在点集的内部,我宣称,能够生成的点集就是以一个点为原点,任意加上每个向量的 \(\dfrac{1}{2^k}(k\in\mathbb Z)\),可以加多次,所得到的点集,与原多边形的交。
而这可以辗转相除法求出对应基底,再用 Pick 定理计算多边形内部整点个数即可,时间复杂度 \(\mathcal{O}(n\log n+n\log V)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #30 B. 青
整体二分,内部可以双指针,复杂度 \(\mathcal{O}(n\log n)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #30 C. 白
这个题咱还不会 w
梦熊 NOI 2025 苍穹计划模拟赛 #31
挺简单的,懒得写比赛过程了。
梦熊 NOI 2025 苍穹计划模拟赛 #31 A. 围墙
分类讨论一下特殊格在哪条边上就好了。
我们只关心一个点向上下左右分别有几个空位,然后悬线法。
时间复杂度 \(\mathcal{O}(n^2)\)(视 \(n,m,q\) 同阶)。
懒了,没写悬线法,复杂度错的,但是过了。
梦熊 NOI 2025 苍穹计划模拟赛 #31 B. 二叉树
记 \(f_{i,j}\) 表示以 \(i\) 为根的子树内,修改后大小为 \(j\),此时的最小花费。
转移直接背包就好了,复杂度 \(\mathcal{O}(n^3)\)。
梦熊 NOI 2025 苍穹计划模拟赛 #31 C. 线段合并
考虑计算一个节点会在多少种情况中被覆盖,只需要用总数减去未被覆盖的,而未被覆盖的相当于求一个二分图的完美匹配数量。
注意到两个同部点的邻域必然相互包含,所以可以简单计算,(按包含序排序后,\(\prod\limits_{i=1}^{n}(c_i-(i-1))\)),其中 \(c_i\) 为节点 \(i\) 的度数。
把所有本质不同的 \(\mathcal{O}(n^2)\) 段都拿出来处理就好了,预处理逆元就可以做到 \(\mathcal{O}(n^2\log n)\)(进一步的,排序的 \(\log n\) 可以被去除)。
信友队
信友队 NOI 2025 训练模拟赛 #1
做了 5 个小时只会一个半题,剩下一个题题目还看错了,没话说了喵。虽然这场榜单好像也不是很好看诶(x
信友队 NOI 2025 训练模拟赛 #1 A. 热异常
不妨假设直径长度不为 \(0\),考虑枚举直径的中点,但是由于可能在一坨零边之间所以要点减边容斥。
但是直径的中点也可能在边上所以要加上这种情况!然后抵消了!然后换根 dp 再前缀和啥的优化一下就好了,时间复杂度 \(\mathcal{O}(n^2)\)。
信友队 NOI 2025 训练模拟赛 #1 B. 無路矢
\(k=1\) 的情况是频繁的,否则只需要减去只出现一次的子序列的个数就好了。
啊,我觉得这很简单,我懒得讲了。
总时间复杂度 \(\mathcal{O}(q\log n{|\Sigma|}^4)\)。
信友队 NOI 2025 训练模拟赛 #1 C. 金币
这个题咱还不会 w
ARC
ARC 201
Oops! There's soemething wrong with my Chinese input, so I will write the summarization in English.
may grammer mistakes occurs, don't mind
ARC 201 A. CatCoder Double Contest
This problem is a subset of F, so I won't explain it to you, O(n).
ARC 201 B. Binary Knapsack
let f(i,j) be the maximum values to aim when we have \(2^i\times j\) memory, and we only consider the items with less then 2^i weight here.
we can let j <= n.
we emumerate how many items we choose in 2^i weight, can be fasten with ternary search, O(nlogVlogn).
ARC 201 C. Prefix Covering
do it with DP easily in the 01-trie, O(nlog V)
ARC 201 D. Match, Mod, Minimize
it can be proved that there is a matching way that:
sort a, b in ascending
choose i and match aj with b_{i-j+1}(j<=i) match aj with b_{n+i+1-j} (i<j<=n).
binary search, two pointers, O(n log V)
ARC 201 E. Total Area of Bounding Boxes
transform it to sum max(S) max(v(S)), use a treap to maintain.
O(nlog n)
ARC 201 F. CatCoder Triple Contest
This problem is a superset of A, so I won't explain it to you, O(n).
杂题
MX-X13-T3 只有失去光明,才能逃脱黑暗。
不妨假设 \(a_i\le 2a_{i-1}\),从小到大枚举 \(i\),那每次更新只会更新到最近的 \(2^i\) 的倍数,直接 dp 复杂度就是 \(\mathcal{O}(m)\) 的。
MX-X13-T4 好胜是人的本能,功利是社会的本性。
第一问是平凡的。
猜想存在一种方案使得没有位置被操作 \(10\) 次以上,那对每个位置被操作的次数 dp 就好了,复杂度 \(\mathcal{O}(n)\)。
MX-X13-T5 茫茫人海如都市的晚高峰,迎面的车终将相遇,迎面的车终将分别。
二分答案算出每个时刻两边通道最少数量 \(a_{0,i}\) 和 \(a_{1,i}\),我猜想合法当且仅当不存在 \(i-C\le j\le i\) 使得 \(a_{0,i}+a_{1,j}>n\) 或 \(a_{1,i}+a_{0,j}>n\),不会证。
复杂度 \(\mathcal{O}(n\log V)\),可以用单调队列和一些数学方法(也可以 random shuffle 后用那个经典(?)trick)做到线性。
MX-X13-T6 能做到的也只不过是静等缘分耗尽的那一天。
记 \(S(i)=\sum\limits_{j=1}^{i}\dfrac{1}{j}\)。
观察得当 \(a<b\) 时,答案为
直接计算即可,时间复杂度 \(\mathcal{O}(\max n+T)\)。
MX-X13-T7 No one can be anything without comparison.
这个题咱还不会 w
QOJ7771 不是这一道据数构结题
P11567 建造军营 II
别急。
NOI 2024 集合
考虑对每个数值所在下标的集合构成的可重集进行 “双重哈希”,双指针维护即可,时间复杂度 \(\mathcal{O}(n+m+q)\)。
这个题我去年咋不会啊?
NOI 2024 百万富翁
一次询问肯定是问若干个团,dp 一下最优决策路线就好了。
NOI 2024 树的定向
我会了,还没写
NOI 2024 分数
爆搜,但是将最宽的那一层的变化量用一个 \(t\) 表示,然后继续搜,就能节省好多好多搜索量,就能过了。
NOI 2024 登山
这个题咱还不会 w
NOI 2024 树形图
如果你知道一个叫做 James and Chase 的题目,你就赢了。
你就可以知道,如果有个好心人给你一个 \(1\) 号点,你该怎么找到所有 \(1\) 号点,其实顺藤摸瓜找到其它的 \(2\) 号点也是简单的,在此略去不表。
如果你考场上能做完这些,你就有 \(55\) 分了。
好那怎么找到这个点呢,这可太难了。
我们考虑最后叶子节点入度肯定为 \(1\),我们把它和它的入度启发式合并,重边留着,自环去了,一直做一直做,具体可以用类似缩广义串并联图的方式缩合实现。
如果你考场上能做完这些,你就有 \(100\) 分了。

浙公网安备 33010602011771号