P1824 进击的奶牛

前言

今天zty带来的是 P1824 进击的奶牛 ,大家给个赞呗,zty还要上学,发作品会少一点
先 赞 后 看 养 成 习 惯
P1824 进击的奶牛_第1张图片


先 赞 后 看 养 成 习 惯
演示用编译器及其标准
Dev C++ 6.7.5 Red panda C++14

正文

进击的奶牛

题目描述

Farmer John 建造了一个有 N N N 2 ≤ N ≤ 1 0 5 2 \leq N \leq 10 ^ 5 2N105) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x 1 , x 2 , ⋯   , x N x _ 1, x _ 2, \cdots, x _ N x1,x2,,xN 0 ≤ x i ≤ 1 0 9 0 \leq x _ i \leq 10 ^ 9 0xi109)。

他的 C C C 2 ≤ C ≤ N 2 \leq C \leq N 2CN)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John 想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?

输入格式

1 1 1 行:两个用空格隔开的数字 N N N C C C

2 ∼ N + 1 2 \sim N+1 2N+1 行:每行一个整数,表示每个隔间的坐标。

输出格式

输出只有一行,即相邻两头牛最大的最近距离。

样例 #1

样例输入 #1

5 3
1
2
8
4
9

样例输出 #1

3
#include
#define ll long long
using namespace std;
int n,m;
int ans=-1;
int a[1000005];
bool panduan(int x) {
	int now = 1, num = 1;
	    for (int i = 2; i <= n; i++){
	        if (a[i]-a[now]>=x){
	            now=i;
	            num++;
	        }
	    }
	    return num>=m;
}
void merge(int l,int r){
	if(r-l<0) return;  
	int mid=l+(r-l>>1);    
	if(panduan(mid)){  
		merge(mid+1,r);
		ans=max(ans,mid);
	}
	else{  
		merge(l,mid-1);
	}
}
int main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	merge(1,(2<<30));
	cout<<ans;
	return 0;
}

后记

作者:zty郑桐羽呀
联系方式:(不挂了,有事私信)
兄弟们给个赞呗
先 赞 后 看 养 成 习 惯

你可能感兴趣的:(洛谷,算法,开发语言,数据结构,zty,二分查找,c++)