zoukankan      html  css  js  c++  java
  • NC21545 牛牛的游戏(贪心)

    首先发掘题目性质,题目要求,每个点,要不往左要不往右跳x

    因此我们可能先想到排序,之后初始化答案为a[n]-a[1]

    那么接下来考虑使用贪心的想法,首先,在接下来的情况左边界肯定不会往左挑,有边界肯定不会往右跳

    而且我们要使左边界尽可能大,右边界尽可能小。所以枚举每个点的跳跃情况时,就找一下左右边界最近能到什么地方

    左边界肯定是a[1]+x和a[i+1]-x的最小值,这里取最小的意思是最大的最小值。右边取a[n]-x和a[i]+x的最大值

    之后更新答案即可

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    ll a[N];
    int main(){
        int i;
        int n;
        cin>>n;
        for(i=1;i<=n;i++)
            cin>>a[i];
        int x;
        cin>>x;
        sort(a+1,a+1+n);
        ll ans=a[n]-a[1];
        for(i=1;i<n;i++){
            ll l=min(a[1]+x,a[i+1]-x);
            ll r=max(a[n]-x,a[i]+x);
            ans=min(ans,r-l);
        }
        cout<<ans<<endl;
        
    }
    View Code
  • 相关阅读:
    【AngularJS】学习资料
    Anaconda环境安装
    ORM表之间高级设计
    drf序列化和反序列化
    安装与使用django-restframework
    django-restframework
    顶象滑块验证码
    Restful接口规范
    Web API接口
    BBS配置
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12682040.html
Copyright © 2011-2022 走看看