Решение задачи Выпиливание и запиливание дверей с Codeforces

Без пояснения   Просмотров: 51


Вы — милиционер и играете в игру со Славиком. Игра является пошаговой, а каждый шаг состоит из двух фаз. Во время первой фазы вы делаете ход, а во время второй фазы Славик делает ход.

Есть n дверей, прочность i-й двери изначально равна ai.

Во время вашего хода вы можете попробовать выпилить одну из дверей. Если вы выбираете дверь i и ее текущая прочность равна bi, то ее прочность становится max(0,bi−x) (значение x задано).

Во время хода Славика он пробует запилить одну из дверей. Если он выбирает дверь i и ее текущая прочность равна bi, то ее прочность становится bi+y (значение y задано). Славик не может запиливать двери с текущей прочностью 0.

Игра длится 10100 шагов. Если какой-то игрок не может сделать свой ход, то он его пропускает.

Ваша задача — максимизировать количество дверей с прочностью 0 в конце игры. Можете считать, что Славик хочет минимизировать количество таких дверей. Чему равно это количество, если вы оба играете оптимально?

Код

#include <bits/stdc++.h>

using namespace std;

int main() {
        int n, x, y, a, c{}; 
        cin >> n >> x >> y;
        if (x > y){ 
            cout << n; return 0; 
        }
        for (int i = 0; i < n; i++){ 
            cin >> a; 
            if(a <= x) c++; 
        } 
        cout << ((c + 1) / 2);
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться