前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforce 1102 C. Doors Breaking and Repairing

Codeforce 1102 C. Doors Breaking and Repairing

作者头像
风骨散人Chiam
发布2020-10-28 10:12:01
3190
发布2020-10-28 10:12:01
举报
文章被收录于专栏:CSDN旧文

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

代码语言:javascript
复制
#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;
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档