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
  • 相关阅读:
    vue-路由传参
    ES6模板字符串
    es6中Set和Map数据结构
    本周面试题
    var、let和const定义变量的特点
    修改this的指向
    Echarts图表插件
    ES6学习
    swiper插件学习
    每日刷题4
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12682040.html
Copyright © 2011-2022 走看看