0/10/1 串有 cntcnt00,那么设 fi,jf_{i,j} 表示操作了 ii 次之后前 mm 个元素中有 jj00

显然有 fx,0=1f_{x,0}=1,其中 xx 是原串中前 mm 个位置中 00 的个数。

转移有一下可能性:

  • 前面的 11 与后面的 00 交换,有 (mj)2(m-j)^2 种方案,转移到 fi+1,j+1f_{i+1,j+1}
  • 前面的 00 与豆面的 11 交换,有 j×(n2×m+j)j\times (n-2\times m+j) 种方案,转移到 fi+1,j1f_{i+1,j-1}
  • 其他的情况都不会影响,直接转移到 fi+1,jf_{i+1,j}

那么就有:

fi+1,j+1fi+1,j+1+fi,j×(mj)2f_{i+1,j+1}\gets f_{i+1,j+1}+f_{i,j}\times (m-j)^2

fi+1,j1fi+1,j1×j×(n2×m+j)f_{i+1,j-1}\gets f_{i+1,j-1}\times j\times(n-2\times m+j)

fi+1,jfi+1,j+fi,j×(n2(mj)2j×(n2×m+j))f_{i+1,j}\gets f_{i+1,j}+f_{i,j}\times (n^2-(m-j)^2-j\times (n-2\times m+j))

写出矩阵,跑矩阵快速幂,时间复杂度为 O(n3logk)O(n^3\log k),其实跑不满因为 00 太多了。