2025.4.1 模拟赛

2025.4.1 模拟赛

罚坐 2h/wtcl

100+40+20=160,rk 17/37

t1 1.5h,慢.jpg

t2 用 1h 写了 100 行的奇妙基环树,严格弱于倍增跳,惨.jpg

t3 刚开始暴力没写 bfs,后来沉迷于“随机生成”,迷.jpg

rand

考虑最小值何时被删掉 & 只能从两边删 -> 笛卡尔树上 dp

随机排列保证了状态数是 \(O(n\log n)\)

chess

棋子数相同,棋盘不同,不同棋盘带来的影响应当不大(否则没法做)。

key1:devans 讲过!
每次经过就 swap \(\Rightarrow f_{i,j+1}\leftarrow \lfloor \frac{f_{i,j}}{2}\rfloor,f_{i+1,j}\leftarrow \lfloor \frac{f_{i,j}}{2}\rfloor\)

只有奇数剩下的才会因为初始棋盘而发生变化。

此时总棋子数缩小到了 \(O(nm)\)

key2: 轮廓线 dp

从上到下,从左到右考虑每个格子的方向,不断扩展棋子能走到的位置。
维护轮廓线的贡献(当前有多少个棋子走到了这个位置),发现状态数是 \(5\times 10^5\) 左右,于是能过。

string

\(O(n^3 \Sigma ^4)\) 区间 dp

\(f(l,r,a,b)\) 表示 \([l+1,r-1]\) 已经变好,且当前 \(s_l=a,s_r=b\),最少操作次数。

枚举最后一次操作点 p 转移。

赛时没往 dp 上想/kk,但这个复杂度确实应该考虑区间 dp ,而且操作显得有些“散乱”,dp 就能忽略掉这些信息。

正解

key1:每次操作不改变 mod 3 的和

按照 mod 3 前缀和相等的位置分段,容易发现段间操作相互独立。

key2:一段的操作次数 \(\in [len-1,len]\)

分类讨论开头位置,归纳可得。

考虑如何判断能否用 len-1 次操作,\(f(i,a,b)\) 表示操作 \([i,n]\) 能否将 \(s_i\)\(a\) 变成 \(b\)

讨论 \((i,i+1)\) 这次操作的位置:

  1. \((i,i+1)\)\(s_i\) 变成 \(b\),然后操作 \([i+1,n]\)
  2. 先操作 \([i+1,n]\),然后 \((i,i+1)\)\(s_i\) 变成 \(b\),并且把 \(s_{i+1}\) 做对。

如果使用 len-1 次操作,那么最后 \(s_r\) 一定是不用变的,故初始值 \(f(r,a,a)=1\),倒着 dp,最后判断 \(f(l,s_l,t_l)\)

posted @ 2025-04-01 20:03  Cindy_Li  阅读(24)  评论(0)    收藏  举报