首页 > 技术文章 > CF729D Sea Battle

dyhaohaoxuexi 2021-04-05 18:48 原文

大意:
一个串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;
}

推荐阅读