NOIP2025 整理

NOIP2025 整理

纪念死去的 NOIP2025。

先分析问题,先找性质,别先向上套做法或套路。

B. P14636 [NOIP2025] 清仓甩卖

考虑这样的贪心策略什么时候不优:装入了一个 \(1\),接下来考虑 \(2\) 时装不下了,只能再装一个 \(1\) 或者不装。但可能直接装这个 \(2\) 更优。

枚举这三个,分别为 \(i,j,k\)。整理一下条件,有 \(a_i>\frac {a_j} 2 >a_k,a_i+a_k<a_j\)

不难发现,此时 一定有 \(a_j>a_i>a_k\)。所以我们先将所有物品按 \(a\) 降序排序。

确定 \(i,j,k\) 后来算方案数。\(i,k\) 之间不能有 \(1\)\(k\) 后面可以任意填 \(1,2\)。在 \(j\) 之前,所有的物品一定都装进来了,\(j,i\) 之间的 \(1\) 都装进来,\(2\) 都没装进来

所以方案数为 \(2^{n-k}\times \binom{i-2}{m-(j-1)}\)。先预支前面 \(j-1\)\(1\),剩下的若给 \(j\) 前面的就变为 \(2\),若给 \(j,i\) 之间的就变为 \(1\)

固定 \(j,k\),对应的 \(i\) 是一段区间,双指针维护。预处理组合数前缀和做到 \(O(n^2)\)

C. P14637 [NOIP2025] 树的价值

\(O(n^3)\) 做法

这个 \({\rm mex}\) 就很奇怪,没有什么好的贪心策略,那么考虑 dp。

\(x\) 子树里的不一定直接给 \(x\) 贡献,而是可能大于 \(x\) 的权值向上贡献。这一部分不好决策,所以 延后处理

\(f_{x,i,j}\) 为考虑 \(x\) 子树,\(v_x=i\),有 \(j\) 个延后节点所能获得的最大价值。

转移 \(f_{x,\max(i,j),k+l} \leftarrow f_{x,i,k}+f_{y,j,l}\)。最后再 \(f_{x,i+k,j-k} \leftarrow f_{x,i,j}+i+k\)

第一个用前缀 \(\max\) 优化 \(\max\) 卷积,第二个二维前缀 \(\max\) 优化。\(O(n^3)\)

\(O(nm^2)\) 做法

上面的 dp 仍有一定的冗余:只有价值最大的子节点的价值有用

而且这个 “价值最大” 的条件也可以放宽:每个非叶子节点选择一个子节点,将其价值接续过来。一个节点的价值为 接续节点的价值加上在这里使用的延后节点个数

但仍需要记录接续节点的价值,并没有什么改善。

将接续关系刻画出来,形成了一个链剖分结构(和深度限制联系起来)。不好记录价值,就 改变答案计算方式,将贡献摊到每个延后节点上。

从一个延后节点开始向根走,会经过若干条不完整的接续链。在这些不完整链中,这个节点一定会选择最长的那条,从底部贡献给整条链。

所以每个节点的贡献改写为:\(x\) 到根最长接续链的长度。

只需记录当前链长度,最长链长度即可做到 \(O(nm^2)\)

\(O(nm\log n)\) 做法

同时记录当前、最长仍有些冗余。

观察 1:\(x\) 是某条接续链的顶端,且 \(fa_x\) 向上的这条链比 \(x\) 的链长,那么 \(x\) 这条链就没用了。

所以我们忽略这样所有的链,将它们看作若干条长度为 \(1\) 的链,不会影响答案。

观察 2:\(x\) 为某条链的顶端,\(x\) 子树只有两种情况:

  • \(x\) 子树内所有的接续链都比 \(fa_x\) 向上的链短。

  • \(x\) 链的长度比 \(fa_x\) 向上的链长。

否则,\(x\) 链没有 \(fa_x\) 的长,且 \(x\) 子树内有比 \(fa_x\) 长的,那么忽略所有比 \(fa_x\) 短的链,将某条比 \(fa_x\) 长的延伸至 \(x\),一定更优。

所以到 \(x\) 这个节点,要么将 \(fa_x\) 的链接续过来,要么直接向下开一条长度与其相等的链。这样就不用记录当前链长度了。

\(f_{x,j}\)\(x\) 为某个链的顶端,上面的最大链长为 \(j\) 的最大价值,\(g_{x,j}\)\(x\) 所在链为最长链,长度为 \(j\) 的最大价值。

\[\begin{gather*} g_{x,j}\leftarrow g_{y,j+1}+j+\sum_{z\in son(x),z\ne y} f_{z,j}\\ f_{x,j}\leftarrow j\times siz_x\\ f_{x,j} \leftarrow g_{u,j}+j\times(j-1)+\sum_{z\in p(fa_u,x),v\in son_z,v\notin p(u,x)} f_{v,j} \ (dep_u-dep_x+1=j) \end{gather*} \]

\(\sum siz_x\)\(O(nm)\) 的,因为每个节点最多贡献 \(m\) 次。 所以第三个转移枚举 \(x\) 所有后代是可行的。

后面 \(f_{v,j}\) 的那项可以对每个 \(j\) 开一棵树状数组,子树加、单点查。

总时间复杂度 \(O(nm\log n)\),空间复杂度 \(O(nm)\)

D. P14638 [NOIP2025] 序列询问

区间询问,在二维平面上考虑。

对于询问 \((L,R,i)\),把涉及的区间拿出来,在平面上框出了一个梯形。这个梯形是由 \(x=i,y=i,y=x+L-1,y=x+R-1\) 四条直线框出来的。

可以发现,对于相同的 \((L,R)\)\(y=x+L-1,y=x+R-1\) 这两条直线不会变。所以 \(i\) 变化时,梯形在这两条直线中间平移。

\(2L\ge R\) 时,两个平行四边形就可以覆盖梯形。

\(2L<R\) 时,先用一个平四覆盖右上方,左下方的等腰直角三角形用两个平四、一个正方形覆盖。

平四最值用 ST 表+单调队列 求解,正方形最值直接使用 ST 表。

复杂度 \(O(nq)\)

posted @ 2026-01-04 17:22  XP3301_Pipi  阅读(2)  评论(0)    收藏  举报
Title