Aggressive cows

来源:互联网 发布:sql如何导入数据库 编辑:程序博客网 时间:2024/06/07 10:55

题目:Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,…,xN (0 <= xi <= 1,000,000,000).
His C (2 <= C <= N) cows don’t like this barn layout and become aggressive towards each other once put into a stall. To prevent the cows from hurting each other, FJ want to assign the cows to the stalls, such that the minimum distance between any two of them is as large as possible. What is the largest minimum distance?
思路:将C头牛放在N个点中的C个点上的最大距离是:dis=(Pmax-Pmin)/(C-1)。然后以dis为上限0为下限进行二分搜索,并利用贪心法。
这里写图片描述

import java.util.Arrays;import java.util.Scanner;public class Aggressivecows {    public static void main(String[] args) {        int low,high,mid;        Scanner in=new Scanner(System.in);        n=in.nextInt();        c=in.nextInt();        arr=new int[n];        for (int i = 0; i < arr.length; i++) {            arr[i]=in.nextInt();        }        Arrays.sort(arr);        high=(arr[n-1]-arr[0])/(c-1);        low=0;        while (low<=high) {            mid=(low+high)/2;            if (Greedy(mid)) {                low=mid+1;            }else {                high=mid-1;            }        }        System.out.println(low-1);        // TODO Auto-generated method stub    }    static int arr[];    static int n;    static int c;    public static boolean Greedy(int x){        int num=1,d=arr[0];        for (int i = 1; i < n; i++) {            if (arr[i]-d>=x) {                num++;                d=arr[i];            }        }        if(num>=c){            return true;        }        return false;    }}
原创粉丝点击