C++,先求出每一列的最大值,并且将最大值保存在数组max中,循环每一列。接着遍历每一行,从第一个数开始判断这个数是不是这一列中最大的,如果是,count+1,说明这一队伍得到过第一,再直接退出,继续判断下一行,即下一个队伍,如果循环完都不是,说明这一队没有得到过第一名,还是初始的count=0。

using namespace std;
#define int long long
#define endl '\n'
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,m,count=0;
    cin>>n>>m;
    char a[100][100]={0};
    int max[100]={0};
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>a[i][j];
    for(int j=0;j<m;j++){
        for(int i=0;i<n;i++){
            if(a[i][j]-'0'>max[j])
                max[j]=a[i][j]-'0';
        }
    }//统计纵向最大值,保存在数组中。
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){//从第一行开始判断每一个数是否是这一列的最大值
            if((a[i][j]-'0')==max[j]){
                count++;
                break;//如果是最大值,退出,再下一行开始判断
            }
        }
    }
    cout<<count<<endl;
    return 0;
}