1 条题解

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

    📝 题目大意

    NN 道题目,第 ii 题分数为 AiA_i。Snuke 解决了 MM 道题,编号为 B1,B2,,BMB_1, B_2, \ldots, B_M。求他获得的总分。

    💡 解题思路

    1. 题目分析N,M100N, M \leq 100,数据范围很小,直接模拟即可。BiB_i 严格递增且 1BiN1 \leq B_i \leq N,无需额外校验。
    2. 算法推导
      • 读入 N,MN, M 以及数组 AA(每题的分数)。
      • 遍历 MM 个已解决的题目编号 BiB_i,由于编号从 11 开始而数组下标从 00 开始,因此取 A[Bi1]A[B_i - 1] 累加到 sum 中。
      • 输出 sum
    3. 边界与细节:注意 BiB_i11-based 索引,访问数组时需减 11。累加变量 sum 需初始化为 00

    ⏱️ 复杂度分析

    • 时间复杂度O(N+M)O(N + M),遍历 AA 数组和 BB 数组各一次。
    • 空间复杂度O(N+M)O(N + M),存储 AABB 两个数组。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
        int n, m, sum = 0;
        cin >> n >> m;
        int a[n];       // 存储每道题的分数
        int b[m];       // 存储已解决题目的编号(1-based)
        for (int i = 0; i < n; i++)
            cin >> a[i];                // 读入每题的分数
        for (int i = 0; i < m; i++)
        {
            cin >> b[i];                // 读入已解决的题目编号
            sum += a[b[i] - 1];         // 编号转下标(1-based → 0-based),累加分数
        }
    
        cout << sum << endl;
    
        return 0;
    }
    
    • 1

    信息

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