【分析】首先被1分割开的每一段区间都是完全独立的,因为战舰必须占据连续的格子。有a个战舰,如果至少能击中一个的话,等价于最后方格最多能放开a-1艘战舰。接下来对每段区间来说,最多能放开「区间长度/b向下取整个战舰。最后构造打击方式的话,对每个战舰打击最后一个格子的位置即可,如果最后一个格子被打中,那么前面b-1个格子可以确定没有了,后面b-1个格子其实也可以确定没有了,例如区间长度为3,[1,2,3],战舰长度为2,此时按照我们的算法最多能放开一个战舰,并且打击位置在2,这样的话[1,2]必然能被确定,[2,3]也能被确定。
#include<bits/stdc++.h>
using namespace std;
const int N = 200001;
int n, a, b, k;
char arr[N];
int main() {
cin>>n>>a>>b>>k;
cin>>arr;
int i, j, t = 0, m = 0;
vector<int> v;
for (i = 0; i < n; i++) {
if (arr[i] == '0') {
t++;
if (t == b) {
t = 0;
v.push_back(i);
m++;
}
} else {
t = 0;
}
}
int ans = m - a + 1;
cout<<ans<<endl;
for (i = 0; i < ans; i++) cout<<v[i] + 1<<" ";
cout<<endl;
}