We all like String with finite length.
有一个长度为n的二进制字符串,我们将k个连续的字符分为一组,即第1个字符到第k个分为一组,第k+1个字符到第2k个字符为一组...保证n为k的倍数。你需要翻转(0变成1,1变成0)其中的一些字符,使得任意一组内的字符全部相等,在翻转次数最少的前提下,我们希望最终字符串被分成的01段的数量也最少。不仅如此,你还需要求出在满足前两个前提下,翻转的方案数有多少。
不同的翻转方案指的是翻转后的两个字符串在任何一个位置不同。
01段是指字符串以子段内全部字符相同为前提下最少划分的段数,例如00100111被划分成4个01段,00000000被划分成1个01段。
举个例子:
当n=4,k=1时,对于二进制字符串0010,最少需要翻转0次,最少分成的分成的01段的数量为3段,翻转方案数为1种。
当n=8,k=4时,对于二进制字符串00110101,最少需要翻转4次,最少分成的分成的01段的数量为1段,翻转方案为2种,即把字符串翻转为00000000或11111111,虽然把字符串翻转成00001111满足任意一组内的字符全部相等满足且翻转4次,但是此时字符串分成的分成的01段的数量为2段,不满足被分成的01段的数量也最少的条件,所以这不是一种合法的方案。