2025.4.17 CWOI 模拟赛 T1T2
T1 稻田灌溉
一眼 DP,看到 \(100\) 的数据想区间 DP,但是不是。
转换题意,转化为画 \(m\) 个括号,对于所有 \(i\),保证被括起来的次数属于 \([a _ i,b _ i]\),求方案数。
设 \(dp _ {i,j,k}\) 表示考虑前 \(i\) 个位置,有 \(j\) 个没被匹配,匹配过了 \(k\) 个的方案数,则转移就去枚举下一个位置放多少个左端点,放多少个右端点,条件是 \(a _ {i + 1} \le l + r \le b _ {i + 1}\)。
因为每个区间不同,所以有个组合数系数 $C _ {m - j - k} ^ l $ 表示从剩下的选 \(l\) 个,右端点需要对应匹配,所以有 \(C _ {j + l} ^ r\) 表示选前面中的 \(r\) 个进行匹配。
四个变量都需要枚举,显然需要优化。我们发现,左右端点可以分别计算,所以可以把 \(dp\) 只拿来转移右端点,开一个 \(f\) 去转移左端点。
所以最后的转移方程如下:
还有为什么开 5s 啊,只跑了 2s 欸。
T2 最长模区间
唐人 *1800,没想到转化打随机化骗的分。
什么 バカ 优化,不需要
首先,我们可以对 \(a\) 进行差分,设为 \(b\)。因为 \(a \bmod p \Leftrightarrow a - p \lfloor \frac{a}{p} \rfloor\),所以一段同余,等同于该段的 \(b\) 的 \(\gcd\) 不为 \(1\)。因为对于一个 \(r\),区间 \([l,r]\) 在 \(l\) 减小时不增,所以可以双指针来找。
在 \(r\) 向后可以快速更新,但是 \(l\) 向后不好撤销操作,所以可以维护一个区间的 \(\gcd\),可以用 lxl ST 表 + 手写 Binary GCD。
有一点卡常,但是 \(609\) ms 创过去了。