Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <map>
- #include <set>
- #include <vector>
- using namespace std;
- struct Student{
- string name;
- string surname;
- int day;
- int month;
- int year;
- int points;
- vector<string> wishes;
- };
- bool pointCmp(Student student1, Student student2) {
- if (student1.points == student2.points) {
- if (student1.year == student2.year) {
- if (student1.month == student2.month) {
- if (student1.day == student2.day) {
- if (student1.surname == student2.surname) {
- return student1.name < student2.name;
- } else {
- return student1.surname < student2.surname;
- }
- } else {
- return student1.day < student2.day;
- }
- } else {
- return student1.month < student2.month;
- }
- } else {
- return student1.year < student2.year;
- }
- } else {
- return student1.points > student2.points;
- }
- }
- bool nameCmp(Student student1, Student student2) {
- if (student1.surname == student2.surname) {
- if (student1.name == student2.name) {
- if (student1.year == student2.year) {
- if (student1.month == student2.month) {
- return student1.day < student2.day;
- } else {
- return student1.month < student2.month;
- }
- } else {
- return student1.year < student2.year;
- }
- } else {
- return student1.name < student2.name;
- }
- } else {
- return student1.surname < student2.surname;
- }
- }
- int main() {
- int n;
- cin >> n;
- map<string, int> places;
- for (int i = 0; i < n; ++i) {
- string university;
- int place;
- cin >> university >> place;
- places[university] = place;
- }
- int m;
- cin >> m;
- vector<Student> students(m);
- for (int i = 0; i < m; ++i) {
- int k;
- cin >> students[i].name >> students[i].surname >> students[i].day >> students[i].month;
- cin >> students[i].year >> students[i].points >> k;
- for (int j = 0; j < k; ++j) {
- string wish;
- cin >> wish;
- students[i].wishes.push_back(wish);
- }
- }
- sort(students.begin(), students.end(), pointCmp);
- map<string, vector<Student>> entered;
- for (int i = 0; i < m; ++i) {
- for (int j = 0; j < students[i].wishes.size(); ++j) {
- if (places[students[i].wishes[j]] > 0) {
- entered[students[i].wishes[j]].push_back(students[i]);
- --places[students[i].wishes[j]];
- break;
- }
- }
- }
- for (auto uni : places) {
- cout << uni.first;
- sort(entered[uni.first].begin(), entered[uni.first].end(), nameCmp);
- for (int i = 0; i < entered[uni.first].size(); ++i) {
- cout << '\t' << entered[uni.first][i].name << ' ' << entered[uni.first][i].surname;
- }
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement