CF1017B

可以发现,若我们要得到一个新的 (a) 满足要求,必须要至少完成以下两种操作之一。

  • 若在第 (i) 位上,(a)(1)(b)(0),那么将 (a) 这一位变为 (0)

  • 若在第 (i) 位上,(a,b) 均为 (0),那么将 (a) 这一位变为 (1)

我们设 (a)(x)(1)(y)(0)。再设有 (z)(a|b=0) 的位置,(k)(a=1,b=0) 的位置。

那么,将 (a) 中一个 (0) 填成 (1)(x) 种方案,反过来为 (y) 种。

所以我们可以将上面操作的方案数算出,分别是 (ky)(zx)

又因为某些情况同时包含了这两种操作,会重复计算,所以要减去。

答案就是 (ky+zx-kz)

原文地址:https://www.cnblogs.com/KnightL/p/15480899.html