@PaulGuan
        
        2016-10-18T17:00:25.000000Z
        字数 839
        阅读 777
    算法 题解
有n个学生,m门科目 (1 ≤ n, m ≤ 100),每门课的成绩用1-9来标记,如果某同学的至少一课拿了最高等级,那么称为successful student(我觉得翻译为成功学生不妥……不知道怎么翻译),现在判定有多少successful student。
用一个结构体记录学生的索引和一科的成绩,然后以成绩为依据进行排序,然后找到每一科的等级最高的学生,记录下来即可。
#include <iostream>#include <string>#include <algorithm>#include <vector>using namespace std;struct student{int index;char num;};vector <student> stu[105];char s[105][105];bool flag[105]={false};bool comp(student x,student y){return x.num>y.num;}int main(void){int n,m;int ans=0;cin>>n>>m;int i,j;for(i=0;i<n;i++)cin>>s[i];for(j=0;j<m;j++){for(i=0;i<n;i++){student stud;stud.num=s[i][j];stud.index=i;stu[j].push_back(stud);}}for(j=0;j<m;j++){sort(stu[j].begin(),stu[j].end(),comp);}for(i=0;i<m;i++){for(j=0;j<n;j++){flag[stu[i][j].index]=true;if(j==n-1)break;if(stu[i][j].num!=stu[i][j+1].num)break;}}for(i=0;i<n;i++){if(flag[i])ans++;}cout<<ans<<endl;return 0;}