Advertisement
SoKnight

Untitled

Feb 15th, 2023
604
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <vector>
  5. #include <algorithm>
  6. #include "pt4exam.h"
  7. using namespace std;
  8.  
  9. // Для ввода используйте поток cin
  10. // Для вывода результатов используйте поток cout,
  11. // выводите символ пробела между полученными результатами,
  12. // перед вещественными числами указывайте манипуляторы:
  13. // fixed, setprecision(2);
  14.  
  15. struct TDeptor {
  16.     int apartment;
  17.     double dept;
  18.     int entrance;
  19.     int level;
  20. };
  21.  
  22. typedef TDeptor* PDeptor;
  23.  
  24. struct TEntranceData {
  25.     int entrance;
  26.     vector<PDeptor> deptors;
  27. };
  28.  
  29. typedef TEntranceData* PEntranceData;
  30.  
  31. bool CompareEntranceData(PEntranceData first, PEntranceData second) {
  32.     int deptorsFirst = first->deptors.size();
  33.     int deptorsSecond = second->deptors.size();
  34.  
  35.     if (deptorsFirst != deptorsSecond) {
  36.         return deptorsFirst > deptorsSecond;
  37.     }
  38.  
  39.     return first->entrance <= second->entrance;
  40. }
  41.  
  42. void Solve()
  43. {
  44.     Task("ExamExt38");
  45.  
  46.     int count;
  47.     cin >> count;
  48.  
  49.     vector<PEntranceData> entrances;
  50.     for (int i = 0; i < 4; i++) {
  51.         PEntranceData data = new TEntranceData;
  52.         data->entrance = i;
  53.         entrances.push_back(data);
  54.     }
  55.    
  56.     string surname;
  57.     double dept;
  58.     int apartment;
  59.  
  60.     for (int i = 0; i < count; i++) {
  61.         cin >> surname;
  62.         cin >> dept;
  63.         cin >> apartment;
  64.  
  65.         int entrance = (apartment - 1) / 36;
  66.         int level = (apartment - entrance * 36) / 4;
  67.  
  68.         PDeptor deptor = new TDeptor;
  69.         deptor->apartment = apartment;
  70.         deptor->dept = dept;
  71.         deptor->entrance = entrance;
  72.         deptor->level = level;
  73.  
  74.         PEntranceData entranceData = entrances[entrance];
  75.         entranceData->deptors.push_back(deptor);
  76.     }
  77.  
  78.     sort(entrances.begin(), entrances.end(), CompareEntranceData);
  79.  
  80.     for (auto iter = entrances.begin(); iter != entrances.end(); iter++) {
  81.         PEntranceData data = *iter;
  82.  
  83.         int deptorsCount = data->deptors.size();
  84.         if (deptorsCount == 0)
  85.             continue;
  86.  
  87.         double totalDept = 0;
  88.         for (auto iterDeptors = data->deptors.begin(); iterDeptors != data->deptors.end(); iterDeptors++) {
  89.             PDeptor deptor = *iterDeptors;
  90.             totalDept += deptor->dept;
  91.         }
  92.  
  93.         double avgDept = totalDept / deptorsCount;
  94.  
  95.         cout << deptorsCount << " ";
  96.         cout << data->entrance + 1 << " ";
  97.         cout << fixed << setprecision(2) << avgDept << endl;
  98.     }
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement