1 条题解

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

    📝 题目大意

    NN 种食品,每种有美味度 AiA_i。高桥会从美味度最大的食品中选一种来吃,但他有 KK 种不喜欢的食品(编号 BiB_i)。若他有可能吃到不喜欢的食品,输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析N100N \leq 100,数据范围极小,直接模拟即可。核心在于理解"有可能吃到"的含义:只要存在至少一种美味度最大且同时被高桥讨厌的食品,答案就是 Yes

    2. 算法推导

      • 首先遍历所有 AiA_i,找到最大值 MM,同时用一个数组 cc 记录所有美味度等于 MM 的食品编号(即"并列第一"的食品集合)。
      • 然后遍历 cc 中的每个编号,检查它是否出现在 BB(讨厌列表)中。
      • 只要有一个匹配,就输出 Yes 并结束;全部检查完都没有匹配,输出 No
      • 关键点:必须记录所有最大值位置,因为最大值可能不止一个,而高桥可能从任意一个中随机选择。
    3. 边界与细节

      • 初始最大值 MM 设为 108-10^8(远小于任何 AiA_i),保证第一个元素能正确更新。
      • 数组 cc 使用指针 pp 维护:当发现更大的 AiA_i 时重置 p=1p=1 并覆盖 c[1]c[1];当发现相等的 AiA_i 时追加到 c[++p]c[++p]
      • 讨厌列表 BB 中的编号是 11-based 的,与 cc 中存储的编号一致,可直接比较。

    ⏱️ 复杂度分析

    • 时间复杂度O(N+pK)O(N + p \cdot K),其中 pp 为最大值个数,最坏 O(NK)O(NK),由于 N,K100N,K \leq 100,完全可行。
    • 空间复杂度O(N)O(N),仅需存储三个长度为 NN 的数组。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 105;
    int a[N], b[N], c[N];   // a: 美味度, b: 讨厌的编号, c: 最大值的所有位置
    int M = -1e8;           // 当前最大值,初始设为极小值
    
    int main() {
        int n, m, p;        // n: 食品数, m: 讨厌数, p: 最大值个数
        cin >> n >> m;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];    // 读入美味度
        }
        for (int i = 1; i <= m; i++) {
            cin >> b[i];    // 读入讨厌的食品编号
        }
        // 第一遍扫描:找到最大值,并记录所有等于最大值的下标
        for (int i = 1; i <= n; i++) {
            if (a[i] > M) {         // 发现更大的值,重置记录
                p = 1;
                c[p] = i;
                M = a[i];
            } else if (a[i] == M) { // 与最大值相等,追加记录
                c[++p] = i;
            }
        }
        // 检查最大值位置中是否有讨厌的食品
        for (int i = 1; i <= p; i++) {
            for (int j = 1; j <= m; j++) {
                if (c[i] == b[j]) { // 某个最大值恰好是讨厌的
                    cout << "Yes" << endl;
                    return 0;
                }
            }
        }
        cout << "No" << endl;
        return 0;
    }
    
    • 1

    信息

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