zoukankan      html  css  js  c++  java
  • 围栏高度的题解

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

    我的做法是二分

    #include <bits/stdc++.h>
    using namespace std;
    template<typename T>inline void read(T &FF){
    	T RR=1;FF=0;char CH=getchar();
    	for(;!isdigit(CH);CH=getchar())if(CH=='-')RR=-1;
    	for(;isdigit(CH);CH=getchar())FF=(FF<<1)+(FF<<3)+(CH^48);
    	FF*=RR;
    }
    template<typename T>void write(T x){
    	if(x<0)putchar('-'),x*=-1;
    	if(x>9)write(x/10);
    	putchar(x%10+48);
    }
    const int MAXN=1e4+10;
    int n,a[MAXN];
    bool check(int x){
    	int l=1;
    	for(int i=1;i<=n;i++){
    		int m=a[i]-x;
    		while(a[l]<m)l++;
    		if((i-l+1)*2>n)return true;
    	}return false;
    }
    int main(){
    	read(n);
    	for(int i=1;i<=n;i++)read(a[i]);
    	sort(a+1,a+n+1);
    	int l,r=MAXN;
    	while(l+1<r){
    		int mid=(l+r)>>1;
    		if(check(mid))r=mid;
    		else l=mid;
    	}cout<<r;
    	return 0;
    }
    
  • 相关阅读:
    selenium headlesschrome下设置最大窗口模式
    lxml简明教程
    lxml etree的一个问题
    pycharm导入模块的时候遇到的两个错误
    linux下安装python
    【Android进阶学习】shape和selector的结合使用
    ANDROID资源文件【转】
    android 屏幕适配问题【转】
    android UI进阶之style和theme的使用
    Android入门第十六篇之Style与Theme [转]
  • 原文地址:https://www.cnblogs.com/zhaohaikun/p/12816970.html
Copyright © 2011-2022 走看看