码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1316 丢瓶盖 题解

时间:2017-09-03 17:49:44      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:return   bool   格式   size   tchar   ios   color   read   char   

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

题目链接 :https://www.luogu.org/problem/show?pid=1316

题目描述

陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?

输入输出格式

输入格式:

第一行,两个整数,A,B。(B<=A<=100000)

第二行,A个整数,分别为这A个瓶盖坐标。

输出格式:

仅一个整数,为所求答案。

输入输出样例

输入样例#1:
5 3
1 2 3 4 5
输出样例#1:
2

说明

限时3秒

 

分析:

二分答案裸题...今天的三道题交的几乎可以交同一份代码(然而我对这道题改了一下)。

 

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 
 6 using namespace std;
 7 int a,b,num[100005],l,r;
 8 
 9 inline void read(int &x)
10 {
11     char ch = getchar(),c = ch;x = 0;
12     while(ch < 0 || ch > 9) c = ch,ch = getchar();
13     while(ch <= 9 && ch >= 0) x = (x<<1)+(x<<3)+ch-0,ch = getchar();
14     if(c == -) x = -x;
15 }
16 
17 bool jud(int x)
18 {
19     int cnt = 1;
20     int tmp = num[1];
21     for(int i = 2;i <= a;++ i)
22     {
23         if(num[i] - tmp >= x)
24             cnt ++,tmp = num[i];
25     }
26     if(cnt >= b) return true;
27     return false;
28 }
29 
30 int main()
31 {
32     read(a),read(b);
33     for(int i = 1;i <= a;++ i)
34         read(num[i]);
35     sort(num+1,num+1+a);
36     l = 1,r = num[a]-num[1];
37     int mid,ans = 0;
38     while(l <= r)
39     {
40         mid = ((l+r)>>1);
41         if(jud(mid)) l = mid+1,ans = mid;
42         else r = mid-1;
43     }
44     printf("%d\n",ans);
45     return 0;
46 }

 

洛谷 P1316 丢瓶盖 题解

标签:return   bool   格式   size   tchar   ios   color   read   char   

原文地址:http://www.cnblogs.com/shingen/p/7470010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!