P11445 「ALFR Round 3」A 调皮的学生题解

· · 题解

要解决这个问题,我们需要统计每个学生的评分次数。如果一个学生只被评过一次分,那么他就不是调皮的学生;否则,他就是调皮的学生。

具体步骤如下:

初始化一个数组 o 来记录每个学生的评分次数。

读取输入数据并更新 o 数组。

遍历 o 数组,统计评分次数不为1的学生数量。

输出这个数量。

下面是实现代码:

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n, a, b, c;
    cin >> n >> a;
    vector<int> o(n + 1, 0); // 使用vector初始化为0
    int p;

    // 读入语文老师评分的学生学号
    for (int i = 0; i < a; i++) {
        cin >> p;
        o[p]++;
    }

    cin >> b;
    // 读入数学老师评分的学生学号
    for (int i = 0; i < b; i++) {
        cin >> p;
        o[p]++;
    }

    cin >> c;
    // 读入英语老师评分的学生学号
    for (int i = 0; i < c; i++) {
        cin >> p;
        o[p]++;
    }

    int len = 0;
    // 统计评分次数不为1的学生数量
    for (int i = 1; i <= n; i++) {
        if (o[i] != 1) {
            len++;
        }
    }

    cout << len;
    return 0;
}

解释:

初始化:我们用一个大小为 n+1 的向量 o 来记录每个学生的评分次数,初始值都为0。

读取输入:分别读取语文、数学和英语老师的评分情况,并更新 o 数组中对应位置的值。

统计调皮学生:遍历 o 数组,统计评分次数不为1的学生数量。

输出结果:输出调皮学生的数量。

这样,我们就可以正确地计算出调皮学生的数量了。