Codeforces 1238 C. Standard Free2play

在这里插入图片描述
在这里插入图片描述

题意:

有一个墙,高度为 h h h,在每一个高度处都有一个踏板,小人站在 h h h 高度处,这个小人每站到一个踏板上,就可以点一个开关,将他所在的踏板收回,并将下一个高度上的踏板改变状态。小人只能最多落下两层楼,如果从高度为 x x x 处落到高度为 x − 3 x-3 x3 处那就会摔的稀碎,当然你肯定不想让他摔死是不是,要是不想摔死就充钱!现在问你最少充多少钱能不让小人摔死。

直接模拟即可
如果初始相邻两个突出的平台高度不连续那么我们显然可以直接从上面一步步操作到达下面的平台的上面一个位置,此时考虑如果我们直接操作,那么下面那个平台就会缩起来,如果当前和更下面的平台 y y y 高度超过 2 2 2 了,并且用在 x x x 位置和用在 x x x 下面一个位置都是一样的,那么直接用在 x x x 位置就好了如果和 y y y 高度不超过 2 2 2 ,那么我们显然直接操作然后落到 y y y 即可。

AC代码:

const int N = 2e5 + 7;
int q, n, m;
int a[N];
int ans, res, cnt;
int main()
{
    sd(q);
    while (q--)
    {
        sdd(n, m);
        rep(i, 1, m)
            sd(a[i]);
        ans = 0;
        rep(i, 2, m)
        {
            if (n <= a[i])
                continue;
            if (n != a[i] + 1)
                n = a[i] + 1;
            if (i < m)
            {
                if (a[i + 1] == a[i] - 1)
                    n = a[i + 1];
                else
                    ans++, n = a[i];
                continue;
            }
            if (n > 2)
                ans++;
            break;
        }
        pd(ans);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值