码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #650 (Div. 3) C. Social Distance

时间:2020-06-18 01:11:57      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:==   $1   div   and   class   include   out   一个   pre   

题目链接:https://codeforces.com/contest/1367/problem/C

题意

给出一个长为 $n$ 的 $01$字符串,两个相邻 $1$ 间距应大于 $k$,初始序列合法,问最多能再使多少 $0$ 变为 $1$ 。

题解

如果当前字符为 $0$,查找 $k$ 个距离内是否有 $1$:

  • 若有则不合法,跳至最近的 $1$
  • 否则因为 $k$ 个距离内没有 $1$,当前字符置为 $1$,跳至第 $i + k$ 个字符

如果当前字符为 $1$,因为初始序列合法,下一个可以置为 $1$ 的 $0$ 至少在第 $i + k$ 个字符后,跳至第 $i + k$ 个字符。

代码

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n, k; cin >> n >> k;
    string s; cin >> s;
    int ans = 0;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == 0) {
            int j = i + 1;
            while (j < s.size() and s[j] == 0 and j - i <= k) ++j;
            if (j - i > k or j == s.size()) {
                ans++;
                i += k;
            } else i = j - 1;
        } else i += k;
    }
    cout << ans << "\n";
}

int main() {
    int t; cin >> t;
    while (t--) solve();
}

 

Codeforces Round #650 (Div. 3) C. Social Distance

标签:==   $1   div   and   class   include   out   一个   pre   

原文地址:https://www.cnblogs.com/Kanoon/p/13155297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!