蓝桥杯-【二分】分巧克力,跳石头-LMLPHP代码及解析:

#include<bits/stdc++.h>
using namespace std;
int n,k;
const int N=100010;
int h[N],w[N];
bool check(int d){
    int num=0;
    for(int i=0;i<n;i++)  
	num += (h[i]/d)*(w[i]/d);
    if(num>=k) return true;      //够分
    else       return false;     //不够分
}
int main(){
    cin >> n >> k;
    for(int i=0;i<n;i++)   cin>>h[i]>>w[i];
    int L=1, R=N;                //D的初值是R=100010
    
  while(L<R) {
        int mid=(L+R)/2;        
        if(check(mid)) L=mid+1; 
        else           R=mid;   
    }
    cout << L-1;   //需要减1 
    return 0;
}

蓝桥杯-【二分】分巧克力,跳石头-LMLPHP

 

#include<bits/stdc++.h>
using namespace std;
int len,n,m;
int stone[50005];
bool check(int d)
{
	int num=0;
	int pos=0;//当前用的石头 
	for(int i=1;i<=n;i++)
	{
		if(stone[i]-pos<d)num++;//可以将他搬走
		else pos=stone[i];//换下一个石头考虑
	}
	if(num<=m)return true;
	else return false; 
}
int main()
{
	cin>>len>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>stone[i];
	}
	int L=0,R=len,mid;
	while(L<R)
	{
		mid=(L+R)/2;
		if(check(mid))L=mid+1;
		else R=mid;
	}
	cout<<L-1;
	return 0;
 } 
04-09 06:25