1855. 愤怒的奶牛

1855. 愤怒的奶牛

奶牛贝茜设计了一款她认为必火的游戏:愤怒的奶牛。

游戏设定(她坚信这是她的原创)是玩家用一个弹弓将一头奶牛射向一个数轴,数轴的不同位置上分布着一些干草捆。

奶牛以足够的力量砸向某个干草捆,并使得该干草捆发生爆炸,爆炸可能会不断引起连锁反应,导致更多的干草捆发生爆炸。

目标是用一头奶牛引起的连锁反应引爆尽可能多的干草捆。

共有 N 个干草捆位于数轴中的不同整数位置,其坐标依次为 x1,x2,…,xN。

如果将奶牛射向位于位置 x 的干草捆,则该干草捆发生爆炸,爆炸半径为 1,爆炸将吞噬 1 单位距离内的所有干草捆。

然后这些干草捆(全部同时)发生爆炸,每个干草捆的爆炸半径为 2。

二次爆炸中吞噬的所有尚未爆炸的干草捆也(全部同时)发生爆炸,爆炸半径为 3。

也就是说,在 t 时刻爆炸的干草捆的爆炸半径为 t,其爆炸波及的干草捆在 t+1 时刻也会爆炸,爆炸半径为 t+1,以此类推。

请确定,通过合理选择奶牛射向的干草捆,能够引爆的干草捆最大数量。

输入格式

第一行包含整数 N。

接下来 N 行包含 x1,…,xN。

输出格式

输出能够引爆的干草捆的最大数量。

数据范围

1≤N≤100,
0≤xi≤109

输入样例:
6
8
5
6
13
3
4
输出样例:
5
样例解释

将奶牛射向位于位置 5 的干草捆,产生半径为 1 的爆炸。

爆炸吞噬位置 4 和 6 处的干草捆,引发半径为 2 的二次爆炸。

二次爆炸吞噬位置 3 和 8 处的干草捆,引发半径为 3 的三次爆炸。

位置 13 的干草捆无法被引爆。

代码:
//枚举
#include <bits/stdc++.h>
using namespace std;

const int N = 110, INF = 2e9;

int n;
int p[N];
int main()
{
    cin >> n;
    p[0] = -INF;
    p[n + 1] = INF;

    for (int i = 1; i <= n; i++)
        cin >> p[i];

    sort(p + 1, p + 1 + n);

    int res = 0;
    for (int i = 1; i <= n; i++)
    {
        int l = 1, r = 1, a = i, b = i;
        //左边
        while (p[a] - p[a - 1] <= l)
        {
            int k = a - 1;
            while (p[a] - p[k - 1] <= l)
                k--;
            l++;
            a = k;
        }
        //右边
        while (p[b + 1] - p[b] <= r)
        {
            int k = b + 1;
            while (p[k + 1] - p[b] <= r)
                k++;
            r++;
            b = k;
        }

        res = max(res, b - a + 1);
    }

    cout << res << endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追寻远方的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值