1 条题解

  • 0
    @ 2026-5-5 14:11:55

    题意简述

    4n4n 道选择题,正确答案中 A、B、C、D 各恰好出现 nn 次。给定 Tim 的作答字符串(含 '?' 表示未填),求 Tim 最多能答对的题数。

    思路

    对于每个选项 X{A,B,C,D}X \in \{A,B,C,D\},统计 Tim 选择了 XX 的次数(即字符串中字符 XX 的出现次数),记作 cntXcnt_X
    由于该选项总共只有 nn 道题的正确答案是 XX,因此 Tim 在该选项上最多答对 min(cntX,n)\min(cnt_X, n) 题。

    答案即为 X{A,B,C,D}min(cntX,n)\sum_{X \in \{A,B,C,D\}} \min(cnt_X, n)

    '?' 不计入任何选项,因此忽略。

    时间复杂度 O(n)O(n) 每组,总复杂度 O(n)4×105O(\sum n) \le 4 \times 10^5,足够快。

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int t;
        cin >> t;
        while (t--) {
            int n;
            cin >> n;
            string s;
            cin >> s;
    
            int cntA = 0, cntB = 0, cntC = 0, cntD = 0;
            for (char c : s) {
                if (c == 'A') cntA++;
                else if (c == 'B') cntB++;
                else if (c == 'C') cntC++;
                else if (c == 'D') cntD++;
            }
    
            int ans = min(cntA, n) + min(cntB, n) + min(cntC, n) + min(cntD, n);
            cout << ans << "\n";
        }
        return 0;
    }
    
    • 1

    信息

    ID
    6904
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者