题意:一个串s,往空的地方放a个长为b的船,当然这a个不能相交。s[i]==1代表这个点禁止放船,问至少选几个点,保证有一个点可以选中一个船
思路:对于一个长为b的区间,选最后一个,能击中的效率会最大。那么处理处k个pos。假设shot这k个位置,一定能打击所有船。假设少射击一个点,能攻击的船从a->a-1。既然只要打中1个,将k个位置去掉a-1个。
#include<bits/stdc++.h>
#define PI acos(-1.0)
#define pb push_back
#define F first
#define S second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int MOD=1e9+7;
//ll a[N][N],sum[N],dis[N];
char s[N];
vector<int> ans;
int main(void){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll n,a,b,k;
cin >>n>>a>>b>>k;
cin >> s+1;
for(int i=1;i<=n;i++){
if(s[i]=='0'){
int cnt=0,j;
for(j=i;j<=i+b-1&&j<=n;j++){
if(s[j]=='0') cnt++;
else{
break;
}
if(cnt==b) ans.pb(j);
}
i=j-1;
}
}
ll res=(int) ans.size()-(a-1);
// cout << "~"<<ans.size()<<endl;
cout << res<<endl;
for(auto t:ans){
res--;
cout <<t <<" ";
if(res==0) break;
}
return 0;
}