Aggressive cows
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
- 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?
- 输入
- * Line 1: Two space-separated integers: N and C
* Lines 2..N+1: Line i+1 contains an integer stall location, xi
- 输出
- * Line 1: One integer: the largest minimum distance
- 样例输入
-
- 5 3
- 1
- 2
- 8
- 4
- 9
- 5 3
- 样例输出
-
- 3
- 提示
- OUTPUT DETAILS:
FJ can put his 3 cows in the stalls at positions 1, 4 and 8, resulting in a minimum distance of 3.
Huge input data,scanf is recommended.
- 来源
- USACO 2005 February Gold
题目OJ链接:http://bailian.openjudge.cn/practice/2456/
题目分析:
(参考http://blog.csdn.net/wuxiushu/article/details/49158843)
题意要表达的是:把C头牛放到N个带有编号的隔间里,使得任意两头牛所在的隔间编号的最小差值最大。例如样例排完序后变成1 2 4 8 9,那么1位置放一头牛,4位置放一头牛,它们的差值为3;最后一头牛放在8或9位置都可以,和4位置的差值分别为4、5,和1位置的差值分别为7和8,不比3小,所以最大的最小值为3。
分析:这是一个最小值最大化的问题。先对隔间编号从小到大排序,则最大距离不会超过两端的两头牛之间的差值,最小值为0。所以我们可以通过二分枚举最小值来求。假设当前的最小值为x,如果判断出最小差值为x时可以放下C头牛,就先让x变大再判断;如果放不下,说明当前的x太大了,就先让x变小然后再进行判断。直到求出一个最大的x就是最终的答案。
本题的关键就在于讨论差值的大小。
代码一:
- #include<iostream>
- #include<algorithm>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- const int MAX = ;
- int a[MAX],n,m;
- bool C(int d)
- {
- int t = a[],count = ;
- for(int i = ;i < n;i ++)
- {
- if(a[i] - t >= d)
- {
- count ++;
- t=a[i];
- if(count >= m)
- return true;
- }
- }
- return false;
- }
- int solve()
- {
- int x = ,y = a[n-] - a[];
- while(x <= y)
- {
- int mid=(x+y)/;
- if(C(mid))
- x=mid + ;
- else
- y=mid - ;
- }
- return x - ;
- }
- int main()
- {
- while(~scanf("%d%d",&n,&m))
- {
- for(int i = ;i < n;i ++)
- scanf("%d",&a[i]);
- sort(a,a+n);
- printf("%d\n",solve());
- }
- return ;
- }
代码二:(一点点小的改动,更好理解)
- #include<iostream>
- #include<algorithm>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- const int MAX = ;
- int a[MAX],n,m;
- bool C(int d)
- {
- int t = a[],count = ;
- for(int i = ;i < n;i ++)
- {
- if(a[i] - t >= d)
- {
- count ++;
- t=a[i];
- if(count >= m)
- return true;
- }
- }
- return false;
- }
- int solve()
- {
- int x = ,y = a[n-] - a[],ans=;
- while(x <= y)
- {
- int mid=(x+y)/;
- if(C(mid))
- {
- ans=mid;x=mid + ;
- }
- else
- y=mid - ;
- }
- return ans;
- }
- int main()
- {
- while(~scanf("%d%d",&n,&m))
- {
- for(int i = ;i < n;i ++)
- scanf("%d",&a[i]);
- sort(a,a+n);
- printf("%d\n",solve());
- }
- return ;
- }
代码三:差不多思路,主要区别在检测函数
- #include <iostream>
- #include<algorithm>
- #include<stdio.h>
- using namespace std;
- const int N=+;
- long long arr[N]={};
- int n,c;
- bool check(long long x)
- {
- long long temp=arr[]+x;
- int count=;//第一个牛棚必选
- for(int i=;i<n;i++)
- {
- if(arr[i]>=temp)
- {
- count++;
- temp=arr[i]+x;
- if(count==c) return true;
- }
- }
- return false;
- }
- int binsearch(long long l,long long r)
- {
- long long mid;
- while(l<=r)
- {
- mid=(l+r)/;
- if(check(mid)) l=mid+;
- else r=mid-;
- }
- return l-;
- }
- int binsearch2(long long l,long long r)
- {
- long long mid;int ans=;
- while(l<=r)
- {
- mid=(l+r)/;
- if(check(mid))
- {
- ans=mid;l=mid+;
- }
- else r=mid-;
- }
- return ans;
- }
- int main()
- {
- while(~scanf("%d%d",&n,&c))
- {
- for(int i=;i<n;i++)
- scanf("%lld",&arr[i]);
- sort(arr,arr+n);
- printf("%d\n",binsearch2(,arr[n-]-arr[]));
- }
- return ;
- }
binsearch两个函数都可以用。
Aggressive cows的更多相关文章
- POJ2456 Aggressive cows
Aggressive cows 二分,关键是转化为二分! #include <cstdio> #include <algorithm> ; ; int N, C; int a[ ...
- [ACM] poj 2456 Aggressive cows (二分查找)
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5436 Accepted: 2720 D ...
- POJ 2456 Aggressive cows
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11192 Accepted: 5492 ...
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
- 疯牛-- Aggressive cows (二分)
疯牛 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...
- 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛
1734: [Usaco2005 feb]Aggressive cows 愤怒的牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 217 Solved: ...
- 最大化最小值 Aggressive cows
Aggressive cows http://poj.org/problem?id=2456 N间小屋,M头牛,使得牛跟牛之间的距离最远,以防止牛打架. 2<=N<=100000 2< ...
- poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分
poj 2456 Aggressive cows && nyoj 疯牛 最大化最小值 二分 题目链接: nyoj : http://acm.nyist.net/JudgeOnline/ ...
- 2456 Aggressive cows
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23866 Accepted: 11141 ...
- POJ 2456: Aggressive cows(二分,贪心)
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20485 Accepted: 9719 ...
随机推荐
- State of Serverless
Some quick thoughts from Serverlessconf, Austin in April 2017 I wanted to take a bit of time to writ ...
- JavaScript:Number 对象
ylbtech-JavaScript:Number 对象 1. Number 对象返回顶部 Number 对象 Number 对象是原始数值的包装对象. 创建 Number 对象的语法: var my ...
- K3C官改固件更新frp客户端
k3c官改1.2 frpc版本是v0.13,本文介绍如何升级到最新版. 1. 下载最新版frp,发布页:https://github.com/fatedier/frp/releases选择mips版, ...
- Python/Shell 正则表达式与运用
正则表达式用的地方是很多的.比如字符串处理过程中.最近遇到记录一下. 1. 比如在shell中 #!/bin/bash str="date:2017-11-28 os:centos blac ...
- go语言之进阶篇空接口
1.空接口 示例: package main import "fmt" func xxx(arg ...interface{}) { } func main() { //空接口万能 ...
- 阅读日志: 微信小程序的风口只有一天?
原文地址: 小程序的风口只有一天?难道我们用的是假的小程序 http://xudanei.baijia.baidu.com/article/755506 原文摘要: #,小程序的趋势,从1月10日至1 ...
- High Availability (HA) 和 Disaster Recovery (DR) 的区别
High availability 和disaster recovery不是一回事. 尽管在规划和解决方案上有重叠的部分, 它们俩都是business contiunity的子集. HA的目的是在主数 ...
- iOS开发-App Icons的尺寸大小
每个App中Icon的尺寸大小是不一样的,如果你添加部分尺寸的Icon,有些没有添加,xCode会给出相应的警告,最近遇到一个问题就是A 76x76 app icon is required for ...
- Siamese Network简介
Siamese Network简介 Siamese Network 是一种神经网络的框架,而不是具体的某种网络,就像seq2seq一样,具体实现上可以使用RNN也可以使用CNN. 简单的说,Siame ...
- TextEdit 只能输入数字(0-9)的限制
MaskType="RegEx" MaskUseAsDisplayFormat="True" Mask="[0-9]*" <dxe:T ...