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\),那么它的一侧(或两侧)一定是没有任何数的,假设为左侧,就得到了这样的序列:

\[\begin{aligned} a & = \{ 1,2,3,{\color{#66CCFF} 5} \} \\ t & = \{ 3,2,{\color{#EEAADD} 1},4 \} \end{aligned} \]

观察到另一侧的 \(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\) 从大到小转移,枚举下一个数加在哪边、加哪个数即可。

不过为了方便还是填表法吧,容易得到转移方程:

\[f_{i,l,r} = \sum _{x=0} ^{l-1} f_{i-1,x,r} + \sum _{x=0} ^{r-1} f_{i-1,l,x} \]

这样就可以同时满足 \(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 的对话


天依宝宝可爱!

posted @ 2025-10-05 21:30  little__bug  阅读(8)  评论(0)    收藏  举报