题目
给定 N 个学生的成绩信息,请你求出女生第一名与男生倒数第一名的分数差距。
输入格式
第一行输入整数 N,表示学生数量。
接下来 N 行,每行包含一个学生的姓名,性别,ID和成绩。其中姓名和ID是长度不超过 10 且不包含空格的字符串。性别为 F(女)或 M(男)。成绩是一个范围在 [0,100] 的整数。保证所有学生的成绩互不相同。
输出格式
输出共三行。
第一行输出女生第一名的姓名和ID。
第二行输出男生倒数第一名的姓名和ID。
第三行输出女生第一名的成绩与男生倒数第一名的成绩的差的绝对值。
如果不存在某个性别的学生,则在对应行输出 Absent。
在第三行输出 NA。
数据范围
1≤N≤101
输入样例1:
3
Joe M Math990112 89
Mike M CS991301 100
Mary F EE990830 95
输出样例1:
Mary EE990830
Joe Math990112
6
输入样例2:
1
Jean M AA980920 60
输出样例2:
Absent
Jean AA980920
NA

解法:模拟

时间复杂度O(n),空间复杂度O(n)

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cmath>
  4. using namespace std;
  5. int main() {
  6. int m = 0, f = 0;
  7. char mname[15], mid[15], fname[15], fid[15];
  8. int ms = 100, fs = 0;
  9. int n;
  10. cin >> n;
  11. while (n--) {
  12. char name[15], sex[5], id[15];
  13. int s;
  14. scanf("%s%s%s%d", name, sex, id, &s);
  15. // cout << sex << ' ' << s << endl;
  16. if (sex[0] == 'F') {
  17. f++;
  18. if (s > fs) {
  19. fs = s;
  20. memcpy(fname, name, sizeof name);
  21. memcpy(fid, id, sizeof id);
  22. }
  23. }
  24. else {
  25. m++;
  26. if (s < ms) {
  27. ms = s;
  28. memcpy(mname, name, sizeof name);
  29. memcpy(mid, id, sizeof id);
  30. }
  31. }
  32. }
  33. if (f == 0)
  34. cout << "Absent" << endl;
  35. else
  36. cout << fname << ' ' << fid << endl;
  37. if (m == 0)
  38. cout << "Absent" << endl;
  39. else
  40. cout << mname << ' ' << mid << endl;
  41. if (m == 0 || f == 0)
  42. cout << "NA";
  43. else
  44. cout << abs(ms - fs);
  45. return 0;
  46. }