Educational Codeforces Round 101 (Rated for Div. 2) C. Building a Fence(思维+贪心)

 

 

 题目要求修建栅栏,第一块栅栏和最后一块栅栏必须放在地面上,第 i 个栅栏所处的地面为 h[i] ,那么该栅栏可以放在 [a[i],a[i]+k-1] 的位置,要求每一块栅栏都必须与前一块栅栏相重合至少 1 个单位格子,问是否可以修建这样的栅栏

对于每一块栅栏我们可以维护改栅栏最低端所能处的位置,根据当前地形位置与前一个地形位置的关系,判断是否可以修建该栅栏 

const int N=2e5+5;

    int i,j,k;
    int n,m;
    int a[N];  

int main()
{
    //IOS;
    rush(){
        cin>>n>>k;
        for(int i=1;i<=n;i++) cin>>a[i];
        int l=a[1],r=a[1],flag=1;
        for(int i=2;i<n && flag;i++){
            if(a[i]>a[i-1]){
                if(a[i]>=r+k) flag=0;
                l=a[i];
                r=min(r+k-1,a[i]+k-1);
            }
            else{
                if(a[i]+k+k-1<=l) flag=0;
                l=max(l-k+1,a[i]);
                r=a[i]+k-1;
            }
        }
        if(l>=a[n]+k || r+k<=a[n]) flag=0;
        puts(flag?"YES":"NO");
    }
   // PAUSE;
    return 0;
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页