Comet OJ 夏季欢乐赛 距离产生美

距离产生美

https://cometoj.com/contest/59/problem/B?problem_id=2680

题目描述

 

JWJU放暑假了,于是鸡尾酒就和女朋友璇璇一起出去玩。但是外面太热了,只要他们牵牵手就会手心出汗。鸡尾酒觉得在这些热的地方就应该保持距离,不然就实在热的受不了了!

现在鸡尾酒获得了一个长度为n的数组,且第i个元素为a_{i}ai

这个数组他看着都热——相邻两个元素实在太接近了。他觉得对于任意的 i(1 < i \le n)i(1<in),都必须满足 |a_{i}-a_{i-1}| \ge kaiai1k,才能被称为“凉快的数组”。

多管闲事的鸡尾酒想帮这个数组降降温。他每一次可以把一个元素改成 [0,10^{18}][0,1018] 中的任意值,请问他最少修改几个元素,才能使得这个数组变为“凉快的数组”。

 

 
 

输入描述

 

第一行一个正整数输入 n, kn,k,

接下来一行包含 nn 个正整数,依次表示 a_{i}ai

(1 \le n \le 10^{5}1n105 ,0 \le  a_{i},k \le 10^{9}0 ai,k109)

 

输出描述

 

输出一行一个正整数表示最少的修改次数

 

样例输入 1 

3 5
1 1 2

样例输出 1

1

提示

可以将中间的数字改为8,这样原数组变为[1,8,2][1,8,2],满足“凉快的数组”的定义,且这样的修改次数是最少的。(当然也有其他的方案只修改1次就使得数组满足要求)

 这场比赛最水的题。

标记+模拟,轻松AC

CODE

#include<cstdio>
#include<cmath>
using namespace std;
int n,k,ans;
int a[100000001];
int main()
{
    scanf("%d%d",&n,&k);
    if(n==1)
    {
        printf("0");
        return 0;
    }
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=2;i<=n;i++)
    {
        if(a[i]==-1 || a[i-1]==-1)
            continue;
        if(abs(a[i]-a[i-1])<k)
            a[i]=-1,ans++;
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2019-07-29 10:06  Seaway-Fu  阅读(284)  评论(0编辑  收藏  举报