poj 2456 Aggressive cows poj 3258 (二分)
2014-07-28 19:33
411 查看
poj 2456
// n点中选c点放下c头牛 是的n-1段距离中的最短距离最大 ,求这个最大的最短距离//假设当前的最小值为x,如果判断出最小差值为x时可以放下C头牛,//就先让x变大再判断;如果放不下,说明当前的x太大了,//就先让x变小然后再进行判断。直到求出一个最大的x就是最终的答案。# include <algorithm># include <string.h># include <stdio.h>using namespace std;int n,c,i,a[100010];int judge(int x){int cot=1;int tmp=a[0];for(i=1;i<n;i++){if(a[i]-tmp>=x)//距离大于栏的间隙 可以放下{cot++;tmp=a[i];if(cot>=c)//可以排下c头牛return true;}}return false;}int slove()//二分查找{int l=0;//最小距离int r=a[n-1]-a[0];//最大距离while(l<=r){int mid=(l+r)/2;if(judge(mid))//可以排下c头牛l=mid+1;elser=mid-1;}return l-1;}int main(){while(~scanf("%d%d",&n,&c)){for(i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);printf("%d\n",slove());}return 0;}poj 3258
include <algorithm># include <stdio.h># include <string.h>using namespace std;int n,m;int a[50010];int slove(int x){int cot=0;int tmp=a[0];for(int i=1;i<=n;i++){if(a[i]-tmp>=x){cot++;tmp=a[i];if(cot>=(n-m))return true;}}return false;}int main(){int L,i;while(~scanf("%d%d%d",&L,&n,&m)){memset(a,0,sizeof(a));for(i=1;i<=n;i++)scanf("%d",&a[i]);sort(a,a+n+1);if(n==m){printf("%d\n",L);continue;}int l=0;int r=L;while(l<=r){int mid=(l+r)/2;if(slove(mid))l=mid+1;elser=mid-1;}printf("%d\n",l-1);}return 0;}
相关文章推荐
- 《挑战程序设计竞赛》3.1.1 二分搜索-最大化最小值 POJ1064 2456 3258 3273 3104 3045
- POJ 2456 3258 3273 3104 3045(二分搜索-最大化最小值)
- poj 3258 River Hopscotch(二分+贪心)
- POJ 3258:River Hopscotch & POJ 3273:Monthly Expense (二分)
- River Hopscotch (poj 3258 二分搜索)
- POJ2456 二分
- poj 2456 Aggressive cows(二分搜素)
- POJ 2456 Aggressive cows(二分)
- POJ 2456 Aggressive cows(二分+贪心验证)
- POJ3258——River Hopscotch(二分)
- Poj 2456 Aggressive cows ( 二分+贪心
- POJ-3258 River Hopscotch 二分枚举求上限
- POJ 2456 Aggressive cows (二分 基础)
- POJ 3258 River Hopscotch(二分·最小距离最大)
- [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
- POJ 3258(二分求最大化最小值)
- Poj 2456 Aggressive cows (二分逼近)
- poj 2456(疯牛)(二分)
- POJ 2456(二分哲学)
- POJ 2456 Aggressive cows(二分查找 最大化最小值)