[NOIP模拟赛] 11-26题解

posted on 2024-11-26 07:42:48 | under | source

前期提要

马上 noip 了,结果被水场揍飞了,不仅 T3 没想去容斥、甚至暴力爆空间了,而且 T2 被卡常,原地升天力。

ε=(´ο`*))) 就当是攒 rp 了。

T1

题意:多项式除法、但是 \(n,m\le 3000\)

直接模拟即可,注意处理 0,可以由高位到低位确定,复杂度 \(O(nm)\)

T2

题意:有 \(n\) 个杆子,第 \(i\) 个杆子价格为 \(c_i\),买了就可以使用无限次,每次跳坐标增或减 \(a_i\)。求花至少几块可以让你到达所有坐标。\(n\le 300,a_i\le 10^9\)

裴蜀定理可知等价于选取的杆子 \(a\) 最大公约数为 \(1\)

容易想到大力 dp,记 \(f_{i,j}\) 为前 \(i\) 个杆子使 gcd 为 \(j\) 的最小代价,过不去。

注意到 \(10^9\) 范围内约数个数最大为 \(2^9\),那么只需要记下有用的状态即可,可以拿 map 实现。复杂度 \(O(2^9n^2)\)

T3

题意:对排列 \(P\) 求出序列 \(A\)\(A_i\) 表示包含 \(i\) 的单调且取值连续的区间的最大长度。已知 \(A\),求有多少种符合条件的 \(P\)\(n\le 3000\)

\(A\) 分为若干极大的相同元素段,显然 \(P\) 的极大单调区间不能跨过多个段,只能在一个段内部,记段的大小为 \(len\)、元素为 \(k\),则 \(P\) 中对应存在 \(\frac {len}k\) 个长度为 \(k\) 的极大单调区间。

求出这 \(m\) 个极大单调区间,记 \(a_i\) 表示第 \(i\) 个区间长度是否 \(>1\)。那么问题转述为:求排列 \(p_1\dots p_m\) 与符号 \(x_1\dots x_m\)(上升或下降)的个数,使得 \(x_{i-1}\)\(x_i\) 假如均为上升则 \(p_{i-1}+1\ne p_i\),下降同理。即每个区间为极大的。

特殊地,若 \(a_i=0\)\(x_i=0/1\) 为同一种方案。

插入法 dp?不好做,因为有后效性难处理——前面的非法关系在插入新元素后可能不存在(lsy 介绍了一种按值从小到大插入的做法,也许可行?)。

考虑容斥,钦定某些位置一定非法,容易发现,连续一段被钦定的元素最终取值为一段单调区间,将其视为一个整体。那么大力 dp 即可,记 \(f_{i,j,0/1}\) 表示前 \(i\) 个点有 \(j\) 个独立区间,且第 \(i\) 个点是否被钦定。转移枚举 \(i\) 钦不钦定即可。复杂度 \(O(n^2)\)

T4

题意:维护一个串,支持动态插入字符于结尾、动态查询有多少个大小为 \(k\) 的子串与 \([1,k]\) 完全一样。强制在线。\(T\le 10^6\)

等价于对每个前缀判断是否存在大小为 \(k\) 的 border,可以建出失配树,那么问题转化为动态新增叶子并链加、动态查询单点值。

暴力往上跳可以通过此题而且跑得飞快!令人忍俊不禁。

可以使用询问分块,做到 \(O(T\sqrt{T})\),可以通过大部分数据。

正解利用 border 的性质:一个串的 border 可以划分为 \(\log\) 个区间,每个区间为一个等差数列。

于是进行树链剖分,对于 \(a,b,c\) 满足 \(c\)\(b\) 的父亲、\(b\)\(a\) 的父亲,若 \(a-b=b-c\) 那么认为 \(b\to a\) 是重边,则任意一点到根的路径上至多有 \(\log\) 条重链,使用树状数组维护看似为 \(O(T\log^2 T)\) 的,实际是 \(O(T\log T)\) 的哦。

我想到一个绝妙的证明,可惜这里的空白太小写不下。

posted @ 2026-01-12 20:03  Zwi  阅读(0)  评论(0)    收藏  举报