首页 > 代码库 > 洛谷 P1316 丢瓶盖
洛谷 P1316 丢瓶盖
P1316 丢瓶盖
题目描述
陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?
输入输出格式
输入格式:
第一行,两个整数,A,B。(B<=A<=100000)
第二行,A个整数,分别为这A个瓶盖坐标。
输出格式:
仅一个整数,为所求答案。
输入输出样例
输入样例#1:
5 3 1 2 3 4 5
输出样例#1:
2
/*对于答案二分,然后验证是否可行 统计当满足mid值时所需要的瓶盖数量,如果小于要求,那么这个值不行*/ #include <algorithm> #include <iostream> using namespace std; int n,m,stone[100001]; bool check(int now) { int last=1,tool=1; for (int i=2;i<=n;i++) { if (stone[i]-stone[last]>=now) { tool++; last=i; } } if (tool<m) return false; return true; } void solve() { int l=1,r=stone[n]-stone[1],mid; while (r>=l) { mid=(l+r)/2; if (check(mid)) l=mid+1; else r=mid-1; } cout<<l-1; //答案在左端点的左边,不然会全部WA return; } int main() { cin>>n>>m; for (int i=1;i<=n;i++) cin>>stone[i]; sort(stone+1,stone+n+1); solve(); return 0; }
洛谷 P1316 丢瓶盖
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。