题解:P11388 [COCI 2024/2025 #1] 飞跃 / Skokovi

· · 题解

注:本题解代码和思路源自官方代码

考虑维护两个变量,分别记录到现在为止能跳到的花的最小值和最大值,显然在区间 [minn-k,maxn+k] 的花都能被跳到,如果此时的花符合条件就输出 1 并更新最小值和最大值,否则输出 0

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int main()
{
    int n,k; 
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    int minn=a[1],maxn=a[1];//一开始的最小值和最大值都是第一朵花的高度
    cout<<"1 ";
    for(int i=2;i<=n;i++)
    {
        if(minn-k<=a[i]&&a[i]<=maxn+k)
        {
            cout<<"1 ";
            minn=min(minn,a[i]);
            maxn=max(maxn,a[i]);
        }//如果满足条件就更新
        else cout<<"0 ";
    }
    return 0;
}