Advertisement
Derga

Untitled

Aug 14th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <deque>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.     int n;
  9.     cin >> n;
  10.  
  11.     deque <short> d(n);
  12.     for (auto& elem : d) {
  13.         cin >> elem;
  14.     }
  15.  
  16.     int result = 0;
  17.  
  18.     while (d.size() > 1) {
  19.         sort(d.begin(), d.end(), greater <int>());
  20.  
  21.         for (int i = d.size() - 1; i >= 0; --i) {  // Удаляем дата центы с вместимостью 0;
  22.             if (d[i] > 0) {
  23.                 break;
  24.             }
  25.             d.pop_back();
  26.         }
  27.  
  28.         int j = 0;
  29.         for (int i = 1; i < d.size(); ++i) {
  30.             int num_saved_photos = d[i] / 2 + d[i] % 2; // Заполняем дата центры на половину
  31.             if (d[j] > num_saved_photos) {
  32.                 result += num_saved_photos;
  33.                 d[j] -= num_saved_photos;
  34.                 d[i] -= num_saved_photos; // Дата-центр может заполниться. Не удаляю потому, что оптимизация слабая, а читается код хуже
  35.             } else {
  36.                 result += d[j];
  37.                 d[i] -= d[j];             // Точно такая же ситуация
  38.                 d[j] = 0;                 // Полностью заполнили j-ый сервер. Идем дальше
  39.                 if (j == 0) {
  40.                     d.pop_front();        // Если заполненный сервер был 0-ым (это будет происходит довольно часто) - удаляю его.    
  41.                     j = i;
  42.                 } else {
  43.                     ++i;
  44.                     j = i;                // Если сервер был не 0-ым - записываю в него 0 и бегу дальше.
  45.                 }
  46.             }
  47.         }
  48.     }
  49.  
  50.     cout << result << endl;
  51.  
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement