Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <map>
- #include <string>
- using std::cout;
- using std::cin;
- using std::string;
- struct student {
- string name;
- string surname;
- int day;
- int month;
- int year;
- int score;
- int number;
- std::vector<string> university;
- };
- bool compare_entry(const student & student1, const student & student2) {
- if (student1.score != student2.score) {
- return student1.score > student2.score;
- } else if (student1.year != student2.year) {
- return (student1.year < student2.year);
- } else if (student1.month != student2.month) {
- return (student1.month < student2.month);
- } else if (student1.day != student2.day) {
- return (student1.day < student2.day);
- } else if (student1.surname != student2.surname) {
- return (student1.surname < student2.surname);
- }
- return (student1.name < student2.name);
- }
- bool compare_entry2(const student & student1, const student & student2) {
- if (student1.surname != student2.surname) {
- return student1.surname < student2.surname;
- }
- return (student1.name < student2.name);
- }
- int main() {
- int N, M, day, month, year, date, sco, number;
- string call, name1, name2, univ;
- std::vector<student> students, result, k;
- std::vector<string> universities;
- std::map<string, int> places;
- std::map<string, std::vector<student>> results;
- cin >> N;
- for (int i = 0; i < N; i++) {
- cin >> univ;
- cin >> number;
- places[univ] = number;
- universities.push_back(univ);
- }
- cin >> M;
- for (int i = 0; i < M; i++) {
- student stud;
- cin >> name1;
- cin >> name2;
- cin >> day;
- cin >> month;
- cin >> year;
- cin >> sco;
- cin >> number;
- stud.name = name1;
- stud.surname = name2;
- stud.day = day;
- stud.month = month;
- stud.year = year;
- stud.score = sco;
- stud.number = number;
- for (int j = 0; j < stud.number; j++) {
- cin >> univ;
- stud.university.push_back(univ);
- }
- students.push_back(stud);
- }
- std::sort(students.begin(), students.end(), compare_entry);
- for (int i = 0; i < N; i++) {
- std::vector<student> empty = {};
- results[universities[i]] = empty;
- }
- for (int i = 0; i < M; i++) {
- for (int j = 0; j < students[i].number; j++) {
- if (places.at(students[i].university[j]) > 0) {
- places.at(students[i].university[j]) -= 1;
- results[students[i].university[j]].push_back(students[i]);
- j = students[i].number;
- }
- }
- }
- for (const auto &myPair : results) {
- cout << myPair.first;
- std::vector<student> st;
- st = results[myPair.first];
- std::sort(st.begin(), st.end(), compare_entry2);
- int i = 0;
- for (i = 0; i < st.size(); i++) {
- cout << '\t' << st.at(i).name << ' ' << st.at(i).surname;
- }
- cout << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement