思路:先记录1出现的次数,再将字符串依据周期k分组,记录每组中连续(不连续的话不连续部分1的数量要比0多)出现1的最多次数(选最多的那组)(出现1则加1出现0则减1),将其余的1(没剩余输出0即可)换成0即可输出结果。
代码:
#include <bits/stdc++.h>
#include <stdlib.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
string s;
cin>>s;
int one=0;
for(int i=0;i<n;i++)
{
if(s[i]=='1') one++;
}
int sum1=0;
for(int i=0;i<k;i++)
{
int sum=0;
for(int i1=i;i1<n;i1=i1+k)
{
if(s[i1]=='0') sum--;
else if(s[i1]=='1') sum++;
if(sum<0) sum=0;
sum1=max(sum,sum1);
}
}
cout<<one-sum1<<endl;
}
system("pause");
return 0;
}

浙公网安备 33010602011771号