CF152A Marks 题解
Content
有 \(n\) 名学生考了 \(m\) 门科目,各得到了自己的成绩单。如果第 \(i\) 个学生的第 \(j\) 个科目的分数 \(a_{i,j}\) 在所有学生中是最高的,那么我们就说这名学生在这门科目上是擅长的。如果第 \(i\) 名学生至少有一门擅长的科目,那么我们就说这名学生是成功的。求有多少名学生是成功的。
数据范围:\(1\leqslant n,m\leqslant100,1\leqslant a_{i,j}\leqslant9\)。
Solution
我们先处理出每个科目最高的分数,再倒回去遍历看每名学生在这门科目上所得到的分数是否是所有学生中最高的,这样就记录出所有成功的学生的人数了。
注意,这里数字的读入是没有空格的。所以我们需要用到 \(\texttt{scanf}\) 中的奇技淫巧——按位读入。具体去代码里看吧。
Code
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
int n, m, ans, a[107][107], maxi[107], suc[107];
int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
scanf("%1d", &a[i][j]);
maxi[j] = max(maxi[j], a[i][j]);
}
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= m; ++j)
if(maxi[j] == a[i][j]) {
suc[i] = 1;
break;
}
ans += suc[i];
}
printf("%d", ans);
}

浙公网安备 33010602011771号