Voldemort's blog

Voldemort's blog

我好菜啊

题解 CF152A 【Marks】

posted on 2020-05-17 10:05:20 | under 题解 |

题解 CF152A 【Marks】

Solution

其实这道题目非常的有意思,但是不要忘了它有众多的坑点。

  • 1:他们的成绩之间是没有空格的,但是这点我们可以用scanf("%1d",&a[i][j];这个玄学的东西来解决。

  • 2:他们的科目是竖着排的,这证明我们需要先枚举竖排再枚举横排。

  • 3:每个科目并列第一的人都很优秀,我们都要把他们算进来。

  • 4:优秀过一次的人不能再优秀,所以我们要用flag来标记。

这些坑点过去了就可以愉快地写代码了!

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

const int N = 109;

int a[N][N],flag[N];
int n,m,Max[N],ans;

template<class T>
inline void read(T& x) {
    x = 0;
    char ch = getchar();
    while(ch < '0' || ch > '9') {
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9') {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
}

int main() {
    read(n);read(m);
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            scanf("%1d",&a[i][j]);
        }
    }
    for(int i = 1;i <= m;i++) {
        for(int j = 1;j <= n;j++) {
            Max[i] = max(Max[i],a[j][i]);
        }
    }
    for(int i = 1;i <= m;i++) {
        for(int j = 1;j <= n;j++) {
            if(a[j][i] == Max[i] && !flag[j]) {
                ans++;
                flag[j] = 1;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}