zoukankan      html  css  js  c++  java
  • 围栏高度(贪心或者二分)

    Description

    奶牛们对围栏的高度非常敏感。奶牛希望围栏高度既不太矮以至于他们没有安全感,也不太高以至于她们看不见围栏外的天地。所以每头奶牛都有自己喜欢的高度。奶牛有N头,每个奶牛有一个自己喜欢的高度在[1..10,000]范围里。
    这对John来说是一个头疼的问题。作为一个美学观点强烈的人,他希望围栏的高度基本相同,但作为一个有同情心的人,他希望能尽可能的满足奶牛们的需求。(或许他只是一个自私的人,希望奶牛能给他多产点奶)
    作为妥协,他决定将围栏的柱子做成不同的高度以满足大多数奶牛的需求(必须严格超过半数)。一个满意的条件是在所有的柱子中有它喜欢的那个高度。但同时John希望最高的柱子和最矮的柱子之间的高度差最小。请你帮他解决这个问题。
    围栏的高度仅仅由柱子的高度决定。

    Input

    第1行:一个整数NN。(1N10000
    第2..N+1N+1:一个整数aiai表示这头牛喜欢的高度。

    Output

    仅一行即最高的柱子和最矮的柱子之间的高度差。

    Samples

    Input Copy
    3
    1
    10
    3
    Output
    2

    Hint

    【样例说明】John使用高度为1,3的柱子建围栏,使三头牛中的两头满意,而3-1=2,所以输出2。

    题目中说了就是要有至少一半的人符合要求,你先拍个序,有贪心的思想来看,区间长度正好为一半的的时候最小,因为已经排过序了,

    所以for循环跑一下,就行

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 12000
    
    int a[MAXN];
    
    inline void read(int &readnum)
    {
        int s=0;char c=getchar();
        while (c<'0' || c>'9') c=getchar();
        while (c>='0' && c<='9') s=s*10+c-48,c=getchar();
        readnum=s;
    }
    
    
    int main()
    {
        int n;
        read(n);
        for (int i=1;i<=n;++i) read(a[i]);
        sort(a+1,a+n+1);
        int len;
        len=n/2+1;
        int ans=INT_MAX;
        for (int i=1;i+len-1<=n;++i) ans=min(ans,a[i+len-1]-a[i]);
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    SQL server 事务介绍,创建与使用
    DOM操作系列-01
    JS键盘事件
    Js获取当前日期时间及其它操作
    js中!!的作用
    js == 与 === 的区别[转]
    学习总结--Dom
    css历史
    javascript中 visibility和display的区别
    “==”和Equals区别
  • 原文地址:https://www.cnblogs.com/lipu123/p/14318091.html
Copyright © 2011-2022 走看看