2 条题解

  • 1
    @ 2025-7-20 18:41:30

    容易得出分3组,去考虑,增,删,替,补,的关系

    #include <bits/stdc++.h>
    using namespace std;
    void solve() {
        string s;
        cin >> s;
        int n = s.length();
        bool has_da = false, has_xiao = false, has_shu = false;
        for (char c : s) {
            if (isupper(c)) has_da = true;  
            if (islower(c)) has_xiao = true;
            if (isdigit(c)) has_shu = true;
        }
        int miss = 3 - (has_da + has_xiao + has_shu); 
        vector<int> re;
        if (n > 0) {
            char now = s[0];
            int cnt = 1;
            for (int i = 1; i < n; i++) {
                if (s[i] == now) cnt++;
                else {
                    if (cnt >= 3) re.push_back(cnt);
                    now = s[i];
                    cnt = 1;
                }
            }
            if (cnt >= 3) re.push_back(cnt);
        }
        int mi = 0;
        for (auto x : re) mi += x / 3;//替换次数
        //所以用max
        if (n < 6) {
            cout << max({6 - n, mi, miss}) << '\n';
        }
        else if (n <= 20) {
            cout << max(mi, miss) << '\n';
        } 
        else {
            int del = n - 20;//删除的机会,考虑删除对替换的影响
            vector<int> m0, m1, m2;
            for (int x : re) {
                int mod = x % 3;
                if (mod == 0) m0.push_back(x);
                else if (mod == 1) m1.push_back(x);
                else m2.push_back(x);
            }
            int k1 = min(del, (int)m0.size());
            mi -= k1;
            del -= k1;
            if (del > 0) {
                int k2 = min(del / 2, (int)m1.size());
                mi -= k2;
                del -= k2 * 2;
            }
            if (del > 0) {
                mi -= del / 3;
            }
            cout << (n - 20) + max(mi, miss) << '\n';
        }
    }
    signed main() {
        ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
        int t = 1;
        // cin >> t;
        while (t--) {
            solve();
        }
        return 0;
    }
    

    信息

    ID
    1118
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    38
    已通过
    10
    上传者