您的位置:首页 > 其它

[luoguP1316] 丢瓶盖(二分答案)

2017-06-18 09:30 316 查看

传送门

 

二分答案再判断即可

 

——代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#define max(x, y) ((x) > (y) ? (x) : (y))
#define N 1000001

int n, m, ans, maxn;
int a
;

inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
}

inline bool check(int x)
{
int i, now = 1, sum = 1;
for(i = 1; i <= n; i++)
if(a[i] - a[now] >= x)
{
sum++;
now = i;
}
return sum >= m;
}

int main()
{
int i, j, x, y, mid;
n = read();
m = read();
for(i = 1; i <= n; i++) a[i] = read(), maxn = max(a[i], maxn);
std::sort(a + 1, a + n + 1);
x = 1, y = maxn;
while(x <= y)
{
mid = (x + y) >> 1;
if(check(mid)) ans = mid, x = mid + 1;
else y = mid - 1;
}
printf("%d\n", ans);
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: