Advertisement
Guest User

Task 2 cpp 2016 iitu

a guest
Dec 10th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. struct Person {
  7.   string name;
  8.   string surname;
  9.   int age;
  10.   int tcome;
  11.   int tleave;
  12. };
  13.  
  14. int timeToMinuts(string t) {
  15.   int h = 0, m = 0;
  16.   if (t[2] == ':') {
  17.     h = (t[0] - '0') * 10 + (t[1] - '0');
  18.     m = (t[3] - '0') * 10 + (t[4] - '0');
  19.   } else {
  20.     h = (t[0] - '0');
  21.     m = (t[2] - '0') * 10 + (t[3] - '0');
  22.   }
  23.   return h * 60 + m;
  24. }
  25.  
  26. void addNotSame(int *arr, int n, int elem) {
  27.   bool repeats = false;
  28.   for (int i = 0; i < n; i++) {
  29.     if (arr[i] == elem) {
  30.       repeats = true;
  31.     }
  32.   }
  33.   if (!repeats) {
  34.     arr[n] = elem;
  35.   }
  36. }
  37.  
  38. Person *findMaxGuests(Person *party, int *t, int n, int p, int *r, int *mt) {
  39.   int max = 0;
  40.   int maxtime = 0;
  41.   for (int i = 0; i < p; i++) {
  42.     int guests = 0;
  43.     for (int j = 0; j < n; j++) {
  44.       if (t[i] >= party[j].tcome && t[i] <= party[j].tleave) {
  45.         guests += 1;
  46.       }
  47.       if (guests > max) {
  48.         max = guests;
  49.         maxtime = t[i];
  50.       }
  51.     }
  52.   }
  53.   *r = max;
  54.   *mt = maxtime;
  55.   Person *res = new Person[max];
  56.   int m = 0;
  57.   for (int i = 0; i < n; i++) {
  58.     if (maxtime >= party[i].tcome && maxtime <= party[i].tleave) {
  59.       res[m] = party[i];
  60.       m++;
  61.     }
  62.   }
  63.   return res;
  64. }
  65.  
  66. void sortByAge(Person *p, int n) {
  67.   for (int i = 0; i < n; i++) {
  68.     for (int j = i + 1; j < n; j++) {
  69.       if (p[i].age > p[j].age) {
  70.         swap(p[i], p[j]);
  71.       }
  72.     }
  73.   }
  74. }
  75.  
  76. int main() {
  77.   int n, p = 0;
  78.   cin >> n;
  79.   int *times = new int[2 * n];
  80.   Person *party = new Person[n];
  81.   for (int i = 0; i < n; i++) {
  82.     string a, b;
  83.     cin >> party[i].name >> party[i].surname >> party[i].age >> a >> b;
  84.     party[i].tcome = timeToMinuts(a);
  85.     addNotSame(times, p, party[i].tcome);
  86.     p++;
  87.     party[i].tleave = timeToMinuts(b);
  88.     addNotSame(times, p, party[i].tleave);
  89.     p++;
  90.   }
  91.   int guestsn, maxt;
  92.   Person *r = findMaxGuests(party, times, n, p, &guestsn, &maxt);
  93.   sortByAge(r, guestsn);
  94.  
  95.   cout << guestsn << endl;
  96.   // cout << maxt / 60 << ":" << maxt % 60 << endl;
  97.   for (int i = 0; i < guestsn; i++) {
  98.     cout << r[i].name << " " << r[i].surname << " " << r[i].age << " ";
  99.     cout << r[i].tcome / 60 << ":" << r[i].tcome % 60 << " ";
  100.     cout << r[i].tleave / 60 << ":" << r[i].tleave % 60 << endl;
  101.   }
  102.  
  103.   delete[] r;
  104.   delete[] party;
  105.   delete[] times;
  106.  
  107.   return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement