MX-J8(vp)
CSP-J 好困难。
【MX-J8】梦熊 CSP-J 2024 模拟赛
链接:link
题解:见洛谷 P11213~P11216 题解区
时间:3.5h (2025.10.05 14:00~17:30)
题目数:4
难度:
A | B | C | D |
---|---|---|---|
\(\color{#FE4C61} 红\) | \(\color{#FFC116} 黄\) | \(\color{#52C41A} 绿\) | \(\color{#9D3DCF} 紫\) |
*900 | *1400 | *1600 | *2800 |
估分:100 + 100 + 100 + 4 = 304
得分:90 + 100 + 100 + 4 = 294
Rank:梦熊 9/192 洛谷 20/2713
场祭
教练让打 J 组模拟赛。
A 签。
B 画一画,考虑枚举 \(k\),发现 \(k\) 在一段区间内所能形成的方案数是固定的,第 \(i\) 维如果可以有 \(a_i \pm k\) 两种取值合法则答案 \(\times 2\),否则如果只有 \(1\) 种取值则答案 \(\times 1\),否则答案 \(\times 0\)。于是枚举每个 \(k\) 的区间即可。
C 发现一些性质就变成大模拟了。写了 1h。
此时还剩 2h,感觉一点也不急,所以 D 想了老半天正解。剩 1h 的时候打暴力结果发现异常难打,最后没调出来。
补题
A 挂 corner case 了挂了 10pts。
笑点解析:D 是错题,虽然后来改过来了,但是教练发的 pdf 题面是原来的。更改的地方是每个新出现的 \(2\) 都算做下一时刻。
补 D,草怎么还可以从两边往中间 dp,这真的是人类能想得到的吗。
因为我们又关心长度,又关心 \(a_i\) 的最大值,还关心该怎么合并,前两个好说,就最后一个怎么合并很难办。注意不到合并的前提是我们默认从中间往两侧 dp,也就是按照题目中的顺序来做,但是我们最后关心的只是 \(t_i\) 大小,并不关心合并过程,所以可以想到从这里下手。
继续观察,发现 \(t_i\) 的范围是很有限的,\(t_i\) 的最小值和 \(a_i\) 的最大值(分别将其令为 \(Ma,Mt\))的位置最多相差 \(1\)。这是因为如果新产生了一个 \(Ma\),那么它的一侧(或两侧)一定是没有任何数的,假设为左侧,就得到了这样的序列:
观察到另一侧的 \(t_i\) 又一定是越往外越大的,所以 \(Mt\) 一定在 \(Ma\) 的左侧一个位置。在继续加数的过程中,再加的数的 \(t_i\) 都一定比 \(Ma\) 大了,不会影响答案;如果 \(Mt\) 被消除了,那么新增的 \(t_i\) 也比 \(Ma\) 的 \(t_i\) 大,然后 \(Mt\) 就等于 \(Ma\) 了。
所以直接不考虑 \(Ma\),那么 \(t_i\) 和 \(a_i\) 分别在两侧的增减性就一定相反了,自然想到将两侧分开考虑。所以可以这样 dp,令 \(f_{i,l,r}\) 为已经有了 \(i\) 个数(确定了 \(t\) 的前 \(i\) 大),并且左侧最右边的 \(a\) 值为 \(l\),右侧最左边的 \(a\) 值为 \(r\) 的方案数。转移需要按照 \(t\) 从大到小转移,枚举下一个数加在哪边、加哪个数即可。
不过为了方便还是填表法吧,容易得到转移方程:
这样就可以同时满足 \(a,t\) 两个限制了。
最后统计答案就比较简单了,分讨 \(Ma,Mt\) 的位置相同和相差 \(1\) 两种情况即可,容易算出 \(g_{i,j}\) 为长度为 \(i\),\(Ma = j\) 的方案数。
具体地,对于 \(g_{i,j}\),若 \(j>i\) 则 \(g_{i,j} = 0\),否则:
-
当 \(Ma,Mt\) 的位置相同时,那么枚举 \(l,r\) 的取值,有:
\[g_{i,j} \gets \sum _{l = 0} ^{j-1} \sum _{r=0} ^{j-1} f_{i-1,l,r} \]其中 \(i-1\) 是因为我们在 dp \(f\) 的过程中扣掉了 \(Ma\),所以需要钦定一个位置放 \(Ma\)。
-
当 \(Ma,Mt\) 的位置相差 \(1\) 时,题解所说的那个式子理解不了,拼尽全力无法战胜,不管了扔了。
一个错误但是不知道为什么错误的思路:
当 \(Ma,Mt\) 的位置相差 \(1\) 时,假设 \(Mt\) 在 \(Ma\) 左边,那么 \(l\) 最多只能取 \(j- \bf 2\), 因为 \(Ma\) 是通过在右边不断填加 \(1\) 最终合并得到的,所以 \(Ma\) 形成的上一步一定会出现形如 \(a = \{ \ldots , l , Ma-1 , Ma-2 , Ma-3 , \ldots , 1 \}\) 的结构,所以此时的 \(l\) 一定 \(< Ma-1\),并且最终若 \(l\) 保留,那也要满足这个条件。而此时 \(r\) 是可以随便取的。再对称地算上 \(Mt\) 在 \(Ma\) 右边的情况,有:
\[g_{i,j} \gets \sum _{l=1} ^{j-2} \sum _{r=0} ^{j-1} (f_{i-1,l,r} + f_{i-1,r,l}) \]
前缀和优化一下,把 \(g\) 预处理出来,最终预处理复杂度是 \(O(n^3)\) 级别的,每次询问 \(O(1)\)。
可以参考我与 ChatGPT o5 的对话。
天依宝宝可爱!