1 条题解

  • 0
    @ 2027-1-16 10:14:13

    【深基6.习2】honoka的键盘

    解题思路

    先统计不修改的 VK 数量,再依次翻转每个位置的 V/K,重新统计并取最大,统计后恢复字符。

    正确性说明

    最多改一个字符的所有方案包括不改和选择一个位置翻转,两类都已枚举;每个方案准确计数,因此最大值最优。

    易错点

    字符恢复后再尝试下一位置;长度为 1 时没有相邻对。

    复杂度

    时间 O(n²),空间 O(n)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n;
        string s;
        cin >> n >> s;
        auto countVK = [&]() {
            int c = 0;
            for (int i = 0; i + 1 < n; i++)
                if (s[i] == 'V' && s[i + 1] == 'K')
                    c++;
            return c;
        };
        int ans = countVK();
        for (int i = 0; i < n; i++) {
            s[i] = s[i] == 'V' ? 'K' : 'V';
            ans = max(ans, countVK());
            s[i] = s[i] == 'V' ? 'K' : 'V';
        }
        cout << ans << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    109
    时间
    400ms
    内存
    125MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者