POJ2456 二分
来源:互联网 发布:汉语方言地图集数据库 编辑:程序博客网 时间:2024/05/17 20:43
题意:
有一排n间固定位置的牛房,放入c头牛,使每头牛之间的间隔最小值最大
要点:
猜测输出的间隔为mid,先排序,再从第一间开始放入牛(第一间肯定要放,这样最高效)进行a[last]+mid<=a[i]的判断,比较特别的是每次判断成立后要改变last的值,也就是从第一间开始如果满足条件马上作为第二间,再从第二间开始判断,说不太清楚,看代码吧
感悟:
二分做的差不多了,接下来再做也就是题目角度的不同,算法已经基本掌握,那么二分到此为止
#include<stdio.h>#include<stdlib.h>#define maxn 100000+5int a[maxn],n,c;int cmp(const void *a,const void *b){ return *(int*)a-*(int*)b;}bool test(int mid){ int i,sum=1,last=0; for(i=1;i<n;i++) { if(a[last]+mid<=a[i]) { last=i; //每次将前一个得到的坐标作为接下来判断的值 sum++; } } if(sum>=c) return true; else return false;}int main(){ int i; while(scanf("%d%d",&n,&c)!=EOF) { int left=0,right=0,mid,step; for(i=0;i<n;i++) scanf("%d",&a[i]); qsort(a,n,sizeof(a[0]),cmp); right=a[n-1]-a[0]; while(left<=right) { mid=(left+right)/2; if(test(mid)) { step=mid;//这种二分判断一般是放在sum<c中,写几个判断一下 left=mid+1; } else right=mid-1; } printf("%d\n",step); } return 0;}
0 0
- POJ2456 二分
- POJ2456 二分
- POJ2456【二分】
- poj2456(二分)
- poj2456(贪心+二分)
- POJ2456 Aggressive cows (二分)
- poj2456 二分搜索
- poj2456(二分搜索)
- POJ2456 Aggressive cows 二分
- nyoj586||poj2456 二分+贪心
- POJ2456 二分搜索
- nyoj586 poj2456二分+贪心
- Poj2456二分+贪心
- POJ2456 Aggressive cows(二分+贪心)
- poj2456二分搜索最大化最小值
- POJ2456 Aggressive cows 二分+判断
- POJ2456 -- Aggressive cows(二分搜索)
- poj2456
- discuz接入七牛sdk
- Arduino 平台与C语言程序设计-week4-Arduino Programs-Lesson3
- Retrofit — 实现Basic Authentication(2)
- 中级篇——优先队列
- oracle数据导入导出
- POJ2456 二分
- storm集群部署
- VMware中Ubuntu为什么挂载不上U盘的解决方法
- Qt对话框中show和exec的区别
- Spring文件上传的问题
- 文章标题
- oracle net manager建立远程连接
- storm常见问题解决方案
- 计算机视觉Computer Vision网址导航