fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using str = string;
  4. struct Man {
  5. str name, fam;
  6. int day, mth, year, mark;
  7. vector<str> lst;
  8. bool operator<(Man& other) {
  9. if (mark != other.mark) return mark > other.mark;
  10. if (year != other.year) return year < other.year;
  11. if (mth != other.mth) return mth < other.mth;
  12. if (day != other.day) return day < other.day;
  13. if (fam != other.fam) return fam < other.fam;
  14. return name < other.name;
  15. }
  16. };
  17. struct Univer {
  18. str name;
  19. int c;
  20. vector<Man> lst;
  21. };
  22. int main() {
  23. int n;
  24. cin >> n;
  25. map<str, Univer> dct;
  26. while (n--) {
  27. Univer u;
  28. cin >> u.name >> u.c;
  29. dct[u.name] = u;
  30. }
  31. int m;
  32. cin >> m;
  33. vector<Man> a;
  34. while (m--) {
  35. Man s;
  36. int x;
  37. cin >> s.name >> s.fam >> s.day >> s.mth >> s.year >> s.mark >> x;
  38. while (x--) {
  39. str univ;
  40. cin >> univ;
  41. s.lst.push_back(univ);
  42. }
  43. a.push_back(s);
  44. }
  45. sort(a.begin(), a.end());
  46. for (auto stud : a) {
  47. for (auto i : stud.lst) {
  48. auto p = dct.find(i);
  49. if (p != dct.end() && p->second.lst.size() < p->second.c) {
  50. p->second.lst.push_back(stud);
  51. break;
  52. }
  53. }
  54. }
  55. for (auto [nm, un] : dct) {
  56. sort(un.lst.begin(), un.lst.end(), [](Man& a, Man& b) {
  57. if (a.fam != b.fam) return a.fam < b.fam;
  58. if (a.name != b.name) return a.name < b.name;
  59. if (a.year != b.year) return a.year < b.year;
  60. if (a.mth != b.mth) return a.mth < b.mth;
  61. return a.day < b.day;
  62. });
  63. cout << nm;
  64. for (auto i : un.lst) {cout << " " << i.name << ' ' << i.fam;}
  65. cout << '\n';
  66. }
  67. return 0;
  68. }
Success #stdin #stdout 0.01s 5304KB
stdin
3
MSU 1
HSE 2
MIPT 100
5
Ivan Ivanov 1 1 1900 100 2 MSU HSE
Petr Petrov 2 1 1900 90 2 MSU HSE
Alexander Sidorov 3 1 1900 110 2 MIPT HSE
Ivan Petrov 3 1 1900 100 3 HSE MSU MIPT
Petr Ivanov 4 1 1900 80 1 HSE
stdout
HSE    Ivan Petrov    Petr Petrov
MIPT    Alexander Sidorov
MSU    Ivan Ivanov