Codeforce 1102 C. Doors Breaking and Repairing

时间:2022-07-28
本文章向大家介绍Codeforce 1102 C. Doors Breaking and Repairing,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Descirbe

You are policeman and you are playing a game with Slavik. The game is turn-based and each turn consists of two phases. During the first phase you make your move and during the second phase Slavik makes his move.

There are n doors, the i-th door initially has durability equal to ai.

During your move you can try to break one of the doors. If you choose door i and its current durability is bi then you reduce its durability to max(0,bi−x) (the value x is given).

During Slavik’s move he tries to repair one of the doors. If he chooses door i and its current durability is bi then he increases its durability to bi+y (the value y is given). Slavik cannot repair doors with current durability equal to 0.

The game lasts 10100 turns. If some player cannot make his move then he has to skip it.

Your goal is to maximize the number of doors with durability equal to 0 at the end of the game. You can assume that Slavik wants to minimize the number of such doors. What is the number of such doors in the end if you both play optimally?

Input

The first line of the input contains three integers n, x and y (1≤n≤100, 1≤x,y≤105) — the number of doors, value x and value y, respectively.

The second line of the input contains n integers a1,a2,…,an (1≤ai≤105), where ai is the initial durability of the i-th door.

Output

Print one integer — the number of doors with durability equal to 0 at the end of the game, if you and Slavik both play optimally.

Examples

inputCopy 6 3 2 2 3 1 3 4 2 outputCopy 6 inputCopy 5 3 3 1 2 4 2 3 outputCopy 2 inputCopy 5 5 6 1 2 6 10 3 outputCopy 2 Note

Clarifications about the optimal strategy will be ignored.

题意大概是两个人玩游戏一个警察,一个坏蛋,一个人破门,一个人补门,警察像破开尽可能多的门,坏蛋想让警察破开门尽可能少,这时候就疑惑了,这到底是让我们求最大值,还是最小值?在这里我们看到,两个人的意愿也改变不了必然的结果,就拿这一组数据 6 3 2 2 3 1 3 4 2 6扇门,警察破门掉 3个耐久,坏蛋修门增加2个耐久,警察与坏蛋轮流操作,警察为破开更多的们,会选择第一次就能破开,或者说最小耐久值的门,坏蛋也是这样想的,他会修补那些一次就被警察破门的门,前提是坏蛋增加耐久大于警察破门,不然以题目这样的数据,一直撞迟早也是撞开的,当坏蛋修补增加的耐久大于警察撞门耐久时,便有了以下操作 5 5 6 1 2 6 10 3 警察第一次撞门 1 坏蛋第一次修门 2 警察第二次撞门 3 再往后警察一次撞不开一扇门,而坏蛋使门的耐久度越来越高,这就得出了必然的结果。 下面是AC code

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int x,y,n,a[10000],s;
    while(cin>>n>>x>>y)
    {
        s=0;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        if(x>y)
        {
            cout<<n<<endl;
        }
        else if(x<=y)
        {
            sort(a+1,a+1+n);
            int w=1;
            for(int i=1;i<=n;i++)
            {
                if(a[i]<=x)
                    s++;
            }
            if(s%2==1) s=s/2+1;
            else s=s/2;
            cout<<s<<endl;
        }
    }
}