1 条题解

  • 0
    @ 2026-6-19 10:30:32

    📝 题目大意

    NN 名玩家,每人打出一张卡牌,颜色为 CiC_i,数值为 RiR_i(所有 RiR_i 互不相同)。若场上存在颜色为 TT 的卡牌,则颜色为 TT 中数值最大者获胜;否则,颜色与玩家 11 卡牌颜色相同的卡牌中数值最大者获胜。输出胜者编号。

    💡 解题思路

    1. 题目分析N2×105N \leq 2 \times 10^5Ci,Ri,T109C_i, R_i, T \leq 10^9,限制 RiR_i 互不相同(保证无平局)。只需要一次遍历即可得出答案,不需要排序或哈希表。
    2. 算法推导
      • 在一次遍历中同时维护两个候选答案:
        • maxValT / winnerT:颜色为 TT 的卡牌中的最大 RiR_i 及其对应玩家编号;
        • maxValC1 / winnerC1:颜色为 C1C_1(即玩家 11 的颜色)的卡牌中的最大 RiR_i 及其对应玩家编号。
      • 遍历结束后,若 winnerT != -1(即存在颜色为 TT 的卡牌),输出 winnerT;否则输出 winnerC1
    3. 边界与细节
      • 玩家编号从 11 开始,注意输出时 i+1i+1
      • 由于 RiR_i 互不相同,无需处理并列情况。
      • 玩家 11 本身也可能是获胜者,这在第二种情况中自然覆盖(因为 C1C_1 颜色组必然包含玩家 11)。
      • 使用 -1 作为初始值,因为 Ri1R_i \geq 1,不会与有效值混淆。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需一次遍历。
    • 空间复杂度O(N)O(N),用于存储 CCRR 数组。

    💻 标准代码 (C++)

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int N, T;
        cin >> N >> T;
        vector<int> C(N), R(N);
        for (int i = 0; i < N; i++) cin >> C[i];  // 读入颜色
        for (int i = 0; i < N; i++) cin >> R[i];  // 读入数值
    
        int maxValT = -1, winnerT = -1;   // 颜色为T的卡牌中:最大数值 & 胜者编号
        int maxValC1 = -1, winnerC1 = -1; // 颜色为C[0]的卡牌中:最大数值 & 胜者编号
    
        for (int i = 0; i < N; i++) {
            if (C[i] == T) {               // 情况1:颜色等于目标颜色T
                if (R[i] > maxValT) {
                    maxValT = R[i];
                    winnerT = i + 1;       // 转换为1-based编号
                }
            }
            if (C[i] == C[0]) {            // 情况2:颜色等于玩家1的颜色
                if (R[i] > maxValC1) {
                    maxValC1 = R[i];
                    winnerC1 = i + 1;
                }
            }
        }
    
        // 若存在颜色为T的卡牌,则情况1的胜者获胜;否则情况2的胜者获胜
        if (winnerT != -1) {
            cout << winnerT << endl;
        } else {
            cout << winnerC1 << endl;
        }
    
        return 0;
    }
    
    • 1

    信息

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