CF729D Sea Battle
大意:
一个串s,往空的地方放a个长为b的船,当然这a个不能相交。s[i]==1代表这个点禁止放船,问至少选几个点,保证有一个点可以选中一个船
思路:
找所有连续0的个数,如果个数大于b,则将其位置放入数组,总共a艘船只,找到q个位置,输出q-a+1个位置即可保证符合题意
#include <bits/stdc++.h>
using namespace std;
int x[200010];
int n, a, b, k, q, sum;
string s;
int main() {
cin >> n >> a >> b >> k >> s;
for (int i = 0; i < n; i++) {
if (s[i] == '1') {
sum = 0;
continue;
}
sum++;
if (sum == b) x[++q] = i + 1, sum = 0;
}
cout << q - a + 1 << endl;
for (int i = 1; i <= q - a + 1; i++) cout << x[i] << " ";
cout << endl;
return 0;
}