@PaulGuan
2016-10-19T01:00:25.000000Z
字数 839
阅读 635
算法
题解
有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;
}