题意:要每块长度为b 总共a块中, 现在射入k个1都没射中 问最少插入多少个1能使得至少命中一块
现在插入ans个1 使得连续b个0的个数即块数(不相交)最多为a-1 这样肯定能命中一个(反证)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
const int N=2e5+20;
int n,a,b,k,ans;
char x[N];
vector<int> p;
void print()
{
cout<<ans<<endl;
for(int i=0;i<p.size();i++)
{
cout<<p[i];
if(i==p.size()-1)
cout<<endl;
else
cout<<' ';
}
}
int main()
{
cin>>n>>a>>b>>k;
int pre=0,now=0;//pre上一个1的位置
scanf("%s",x+1);
for(int i=1;i<=n;i++)
{
if(x[i]=='1')
{
int d=i-pre-1;//中间最多能插多少个连续0(不重叠不相交)
now+=d/b;
pre=i;
}
}
now+=(n-pre)/b;//最后一个1到末尾
ans=now-(a-1);//最少要消去个数
pre=0;
//每一块Shoot任意一个,构造ans即可
for(int i=1;i<=n;i++)
{
if(p.size()==ans)
break;
if(x[i]=='1')
{
while(pre+b<i)
{
p.push_back(pre+b);//每一块最后一个,防止r=d%b时 最后一个r和前面相连
if(p.size()==ans)
break;
pre+=b;
}
pre=i;
}
}
while(p.size()<ans)
{
p.push_back(pre+b);
pre+=b;
}
print();
return 0;
}