[关闭]
@PaulGuan 2016-10-18T17:00:25.000000Z 字数 839 阅读 572

N - Marks 题解

算法 题解


题目大意

有n个学生,m门科目 (1 ≤ n, m ≤ 100),每门课的成绩用1-9来标记,如果某同学的至少一课拿了最高等级,那么称为successful student(我觉得翻译为成功学生不妥……不知道怎么翻译),现在判定有多少successful student。

分析

用一个结构体记录学生的索引和一科的成绩,然后以成绩为依据进行排序,然后找到每一科的等级最高的学生,记录下来即可。

代码

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <vector>
  5. using namespace std;
  6. struct student
  7. {
  8. int index;
  9. char num;
  10. };
  11. vector <student> stu[105];
  12. char s[105][105];
  13. bool flag[105]={false};
  14. bool comp(student x,student y)
  15. {
  16. return x.num>y.num;
  17. }
  18. int main(void)
  19. {
  20. int n,m;
  21. int ans=0;
  22. cin>>n>>m;
  23. int i,j;
  24. for(i=0;i<n;i++)
  25. cin>>s[i];
  26. for(j=0;j<m;j++)
  27. {
  28. for(i=0;i<n;i++)
  29. {
  30. student stud;
  31. stud.num=s[i][j];
  32. stud.index=i;
  33. stu[j].push_back(stud);
  34. }
  35. }
  36. for(j=0;j<m;j++)
  37. {
  38. sort(stu[j].begin(),stu[j].end(),comp);
  39. }
  40. for(i=0;i<m;i++)
  41. {
  42. for(j=0;j<n;j++)
  43. {
  44. flag[stu[i][j].index]=true;
  45. if(j==n-1)
  46. break;
  47. if(stu[i][j].num!=stu[i][j+1].num)
  48. break;
  49. }
  50. }
  51. for(i=0;i<n;i++)
  52. {
  53. if(flag[i])
  54. ans++;
  55. }
  56. cout<<ans<<endl;
  57. return 0;
  58. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注