Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <deque>
- using namespace std;
- int main() {
- int n;
- cin >> n;
- deque <short> d(n);
- for (auto& elem : d) {
- cin >> elem;
- }
- int result = 0;
- while (d.size() > 1) {
- sort(d.begin(), d.end(), greater <int>());
- for (int i = d.size() - 1; i >= 0; --i) { // Удаляем дата центы с вместимостью 0;
- if (d[i] > 0) {
- break;
- }
- d.pop_back();
- }
- int j = 0;
- for (int i = 1; i < d.size(); ++i) {
- int num_saved_photos = d[i] / 2 + d[i] % 2; // Заполняем дата центры на половину
- if (d[j] > num_saved_photos) {
- result += num_saved_photos;
- d[j] -= num_saved_photos;
- d[i] -= num_saved_photos; // Дата-центр может заполниться. Не удаляю потому, что оптимизация слабая, а читается код хуже
- } else {
- result += d[j];
- d[i] -= d[j]; // Точно такая же ситуация
- d[j] = 0; // Полностью заполнили j-ый сервер. Идем дальше
- if (j == 0) {
- d.pop_front(); // Если заполненный сервер был 0-ым (это будет происходит довольно часто) - удаляю его.
- j = i;
- } else {
- ++i;
- j = i; // Если сервер был не 0-ым - записываю в него 0 и бегу дальше.
- }
- }
- }
- }
- cout << result << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement