Comet OJ 夏季歡樂賽 距離產生美

距離產生美html

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

題目描述markdown

 

JWJU放暑假了,因而雞尾酒就和女友璇璇一塊兒出去玩。可是外面太熱了,只要他們牽牽手就會手心出汗。雞尾酒以爲在這些熱的地方就應該保持距離,否則就實在熱的受不了了!flex

如今雞尾酒得到了一個長度爲n的數組,且第i個元素爲a_{i}aispa

這個數組他看着都熱——相鄰兩個元素實在太接近了。他以爲對於任意的 i(1 < i \le n)i(1<in),都必須知足 |a_{i}-a_{i-1}| \ge kaiai1k,才能被稱爲「涼快的數組」。code

多管閒事的雞尾酒想幫這個數組降降溫。他每一次能夠把一個元素改爲 [0,10^{18}][0,1018] 中的任意值,請問他最少修改幾個元素,才能使得這個數組變爲「涼快的數組」。htm

 

 
 

輸入描述blog

 

第一行一個正整數輸入 n, kn,k,get

接下來一行包含 nn 個正整數,依次表示 a_{i}aiinput

(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;
}
相關文章
相關標籤/搜索