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)\) 这次操作的位置:
- 先 \((i,i+1)\) 把 \(s_i\) 变成 \(b\),然后操作 \([i+1,n]\)
- 先操作 \([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)\)。

浙公网安备 33010602011771号