• Codeforces Round #646 (Div. 2) B. Subsequence Hate(前缀和)


    题目链接:https://codeforces.com/contest/1363/problem/B

    题意

    可以将 $01$ 串中的 $0$ 变为 $1$、$1$ 变为 $0$,问至少需要变换多少字符使得 $01$ 串中不含有 $010$ 或 $101$ 的子序列。

    题解

    不含有 $010$ 或 $101$ 的子序列即任意两个 $0$ 间没有 $1$、两个 $1$ 间没有 $0$ 。

    这样的 $01$ 串有两种情况:

    • 连续的 $0$ $+$ 连续的 $1$
    • 连续的 $1$ $+$ 连续的 $0$

    计算将前 $i$ 位都变为 $0$ 或 $1$ 需要变换的字符,然后分别枚举两种情况中 $01$ 的长度即可。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    void solve() {
        string s; cin >> s;
        int n = s.size();
        int pre[2][n + 1];
        memset(pre, 0, sizeof pre);
        for (int i = 0; i < n; i++) {
            pre[0][i + 1] = pre[0][i] + (s[i] == '1'); 
            pre[1][i + 1] = pre[1][i] + (s[i] == '0');
        }
        int ans = n;
        for (int i = 0; i <= n; i++)//枚举 i个0 + n-i个1
            ans = min(ans, pre[0][i] + pre[1][n] - pre[1][i]);
        for (int i = 0; i <= n; i++)//枚举 i个1 + n-i个0
            ans = min(ans, pre[1][i] + pre[0][n] - pre[0][i]);
        cout << ans << "
    ";
    }
    
    int main() {
        int t; cin >> t;
        while (t--) solve();
    }
  • 相关阅读:
    http协议
    web应用
    前端基础-jquery
    jQuery的事件
    2.UML类图基本介绍
    1.设计模式的七大原则
    使用OpenFeign远程调用时请求头处理报错问题
    SpringCloud Config-分布式配置中心
    19. 类加载器详解
    18. 类加载过程详解
  • 原文地址:https://www.cnblogs.com/Kanoon/p/13023744.html
Copyright © 2020-2023  润新知