Advertisement
999ms

Untitled

Oct 8th, 2021
768
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using ll = long long;
  5.  
  6. struct Student {
  7.     int id, d, m, y, score, unik_n;
  8.     string name, surname;
  9.     vector<string> u;
  10. };
  11.  
  12. void solve() {
  13.     int n;
  14.     cin >> n;
  15.    
  16.     map<string, pair<int, vector<int>>> unik;
  17.     for (int i = 0; i < n; i++) {
  18.         string name;
  19.         int places;
  20.         cin >> name >> places;
  21.         unik[name].first = places;
  22.     }
  23.  
  24.     int m;
  25.     cin >> m;
  26.     vector<Student> a(m);
  27.     for (int i = 0; i < m; i++) {
  28.         a[i].id = i;
  29.         cin >> a[i].name >> a[i].surname
  30.             >> a[i].d >> a[i].m >> a[i].y
  31.             >> a[i].score >> a[i].unik_n;
  32.        
  33.         for (int j = 0; j < a[i].unik_n; j++) {
  34.             string s;
  35.             cin >> s;
  36.             a[i].u.push_back(s);
  37.         }
  38.     }
  39.  
  40.     sort(a.begin(), a.end(), [] (auto& a, auto& b) {
  41.         return tie(b.score, a.y, a.m, a.d, a.surname, a.name) <
  42.                 tie(a.score, b.y, b.m, b.d, b.surname, b.name);
  43.     });
  44.    
  45.     for (int i = 0; i < m; i++) {
  46.         for (auto &un : a[i].u) {
  47.             if (unik[un].first > 0) {
  48.                 unik[un].second.push_back(i);
  49.                 unik[un].first--;
  50.                 break;
  51.             }
  52.         }
  53.     }
  54.    
  55.     for (auto [name, data] : unik) {
  56.         sort(data.second.begin(), data.second.end(), [&a] (auto firstIndex, auto secondIndex) {
  57.             const auto& first = a[firstIndex];
  58.             const auto& second = a[secondIndex];
  59.             return tie(first.surname, first.name, first.y, first.m, first.d) <
  60.                     tie(second.surname, second.name, second.y, second.m, second.d);
  61.         });
  62.  
  63.         cout << name << '\t';
  64.         for (auto& i : data.second) {
  65.             cout << a[i].name << ' ' << a[i].surname << '\t';
  66.         }
  67.         cout << '\n';
  68.     }
  69. }
  70.  
  71. int main() {
  72.     ios_base::sync_with_stdio(false);
  73.     cin.tie(nullptr);
  74.     cout.tie(nullptr);
  75.     solve();
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement