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的学生数量。
输出结果:输出调皮学生的数量。
这样,我们就可以正确地计算出调皮学生的数量了。