洛谷二分查找题目详解

B3881 [信息与未来 2015] 拴奶牛

题目描述

有 n 头奶牛,有 k 个木桩,每个木桩有一个位置,一个木桩上只能拴一头奶牛。由于奶牛好斗,所以在拴奶牛的时候,要求距离最近的奶牛的距离尽可能大。

例如 n=4,k=6,木桩的位置为 0,3,4,7,8,9,此时为下图。

OllOOllOOO​0   3 47 8 9​

有许多种拴牛方案,例如:

  • 0,3,4,9:此时最近距离为 1(3,4 之间);
  • 0,3,7,9:此时最近距离为 2。

输入格式

三个整数 n,k,p1​,其中 p1​ 为第 1 个木桩的位置,其他木桩 pi​(i≥2) 的位置由下面公式给出:

pi​=pi−1​+((pi−1​×2357+137)mod10)+1。

输出格式

一个整数,即奶牛间最近距离的最大值。

输入输出样例

输入 #1复制

25 70 99

输出 #1复制

12

说明/提示

1≤n≤k≤106,0≤p1​≤100。

#include
using namespace std;
const int N=1e6+10;
long long n,k,p[N];
bool check(int x)
{
	int sum=1;
	int pre=p[1];
	for(int i=2;i<=k;i++)
	{
		if(p[i]-pre>=x)
		{
			sum++;
			pre=p[i];
		}
	}
	return sum>=n;
}
int main() {
	cin>>n>>k>>p[1];
	for(int i=2;i<=k;i++)p[i]=p[i-1]+((p[i-1]*2357+137)%10)+1;
	int l=1,r=1e8;
	while(l>1;
		if(check(mid))l=mid;
		else r=mid-1;
	}
	cout<

每根杆子只能栓1头奶牛,而且最近距离要尽可能大,要用二分答案。(这个公式别复制错)

B3880 [信息与未来 2015] 买木头

题目描述

有 n 个木材供应商,每个供应商有长度相同的一定数量的木头。长木头可以锯短,但短木头不能接长。有一个客人要求 m 根长度相同的木头,要求计算出:此时供货商提供的木头满足客人要求的最大长度是多少。

例如 n=2,

你可能感兴趣的:(算法,c++,数据结构)