solution-agc045c

orz zjk。学到了。对于这一类计数最终由多少不同局面的题,我们首先应当考虑一下如何判断最终局面合法。感觉正着做不太方便,于是我们考虑倒着做。

首先,容易发现 0 和 1 是对称的,哪个是 0 哪个是 1 不重要,所以我们不妨设 ABA \leq B

考虑倒着操作是怎么样的,于是我们将操作改写为:

  • 选择 xx 中长度为 AA 的字串,其中字符为 0 或 ?,将他们改为 ?。
  • 选择 xx 中长度为 BB 的字串,其中字符为 1 或 ?,将他们改为 ?。

容易发现,我们只要最后到达了全是 0 或者 ? 的字符串就有解了。观察并手玩一下,发现只要进行了一次二操作,就一定有解。原因是进行一次二操作后我们可以得到一个长度为 BB 的 ? 区间。我们必定可以通过每次往左,往右拓展一格使得整个字符串被置为 ?。

到这里有解的限制就变得清晰了。一个最终局面 xx 有解当且仅当将其长度大于等于 AA 的字串置为 1之后,1 的极长连续段的长度大于等于 BB

现在你可以直接计数了。这部分是简单的。

code