ZR 2025 NOIP 二十连测 Day 7
想 1h B 的正解 vs 打 D 15pts 的部分分。
25noip二十连测day7
链接:link
题解:题目内
时间:4h (2025.10.24 14:00~18:00)
题目数:4
难度:
| A | B | C | D |
|---|---|---|---|
| \(\color{#FFC116} 黄\) | \(\color{#FFC116} 黄\) | \(\color{#9D3DCF} 紫\) | \(\color{#BFBFBF} ?\) |
| *1300 | *1500 | *2700 | *? |
估分:100 + 15+? + [25,35] + 35 = [175,185]+?
得分:100 + 25 + 25 + 30 = 185
Rank:75/130
场祭
读题。
开 A,注意到答案大约就是 \(2\) 的问号个数次幂,或者这个东西 \(-1\),于是绝大部分串都是合法的,手玩一下发现只有 100000 这样的串是不合法的,做完了。
开 B,贪心?一定先操作 \(2\) 后操作 \(1\)?试了不少方案然后都轻而易举地 hack 掉了,1h 毫无头猪,于是打暴力,发现暴力叶不会几分,打了个爆搜神必剪枝跑路了。
开 C,发现一个图不是三分图当前仅当存在 \(4\) 个点,它们之间两两连边,于是就是排列中存在 \(a>b>c>d\) 的东西,这个能直接 BIT 求,于是暴力分有了,性质 B 有了,然后去考虑性质 C,推了半天容斥发现好困难,于是给暴力加了个神必剪枝就走了。
开 D,啊怎么这么多部分分?20pts 的暴力分,\(b_i=1\) 就是区间 min,\(b=10^9\) 且性质 A 直接最值分治一下,去掉性质 A 就是整体二分。
但是时间不够了,最后整体二分的 15pts 没来得及写(
补题
?B 怎么这么简单,注意到可以转化为在一个柱状图上删一些行一些列,然后随便枚举一下就做完了呀。。赛时光去想单次操作该怎么做,关注操作顺序去了糖丸了。。。
C 是神必数数题,竟然看题解看会了 /oh
先找一些启发点,考虑求 LIS 的那个 dp,我们照搬到 LDS 上,那么就是要维护一个递减序列,每次找到第一个 \(\le x\) 的数将其修改为 \(x\)。又因为排列合法当且仅当 LDS 长度 \(\le 3\),于是注意到这个 \(3\),正好可以对应 \(O(n^3)\) 的复杂度,启示我们枚举这个长度为 \(3\) 的 LDS 来搞事情。
先考虑性质 C,也就是没有字典序的要求。
令当前 LDS 为 \(x>y>z\),考虑添加一个数 \(t\) 之后会产生什么变化,发现 \(t\) 要么会替换掉 \(x,y,z\) 中的某一个数,要么会跟在 \(x,y,z\) 的后面,其中后者所形成的序列显然是不合法的。
但是这似乎并没有什么用,因为可能的情况太多了,而且还没法确定剩余什么数。
继续思考我们到底需要什么。发现方案数和 LDS 的具体形态并没有直接的关系,这意味着是可以不直接考虑 LDS 的具体形态的。
然后有一点注意:就是前面那种不合法的情况,显然只会在 \(t<z\) 的情况下发生,而且只有剩余的数中有 \(<z\) 的数就必然会发生,只是发生的具体时刻有区别罢了。
这启示我们记录剩余数的个数!
发现 \(x,y,z\) 正好将 \(1 \sim n\) 这 \(n\) 个数划分成了 \(4\) 个区间,而又要保证其中一个区间中的数全部已选,所以需要考虑的只有 \((z,y) , (y,x) , (x,n]\) 这 \(\bf 3\) 个区间,再一次对应了 \(O(n^3)\) 的复杂度。
继续考虑,发现加入任意一个数对区间长度产生的贡献都是可计算的。
很显然需要 dp 了,令 \(f_{i,j,k}\) 为 \((x,n] , (y,x) , (z,y)\) 内分别有 \(i,j,k\) 个数的方案数。转移直接枚举选了哪个区间的哪个数(注意此处并非具体值,而是区间中的相对位置):
最后一个转移只从 \(k-1\) 这一个状态转移是为了保证 \([1,z)\) 区间内没有数。
直接转移是 \(O(n^4)\) 的,但是容易发现是可以前缀和优化的,复杂度 \(O(n^3)\)。
……然后发现还没完,因为它多测并且没有规定 \(\sum n\) 的范围,于是上面 dp 不就是 \(O(Tn^3)\) 的了吗?
显然转移已经不能再优化了,状态有很难优化……
不过观察转移式子,发现其中根本没有出现任何和 \(n\) 有关的项,把代码写出来之后除了要枚举到 \(n\) 之外也没有……所以对于任意 \(n\),dp 数组应该都会是一样的,似乎有点不符合人类直觉,但仔细想想这个 dp 发现 \([1,z)\) 内的数似乎并没有什么影响答案的地方,所以这是正确的。
状态和转移都和 \(n\) 无关了 dp 还能和 \(n\) 有关嘛。。
至此……还没完,因为上面只考虑了没有字典序限制的情况。
不过加上限制也是简单的,很容易想到一个类似于数位 dp 的东西,先差分掉,变成计算字典序 \(\le p\) 的方案数,然后就是枚举 \(p\) 的每一位 \(i\),保证第 \(1 \sim i-1\) 位都和 \(p\) 相同,第 \(i\) 位比 \(p\) 小就可以了。
并且,dp 所需要的三个区间的长度也是容易算的,模拟一下 LIS(LDS) 的那个 dp 即可。
在实现上,为了保证时间复杂度 \(\le O(Tn^2)\),可以维护一个 \(c_i\) 数组,表示 \(\le i\) 的数的剩余个数,那么上面那一坨就都是很好维护的了。
天依宝宝可爱!

浙公网安备 33010602011771号