养鱼喂妹子(WOC)

#include<cstdio>
#include<iostream>
using namespace std;
#define N 100001
long long a[N],b[N],maxx;
int n;
bool check(long long x)
{
long long carry=0;
for(int j=1; j<n; j++)//嘛,n个城镇啊~ 
{
carry=carry+b[j]-x;//0.0 carry是干啥的? 貌似是记录比(哔)大或小的量 
if(carry<0)//
carry=carry-a[j+1]-a[j];// 较小时,和别的城镇要
else
if(carry<a[j+1]-a[j])//比较路费啊,运过去的鱼全当路费了。。。还有意思么 
carry=0;
else
carry-=a[j+1]-a[j]; //大于运费时不管多少还是管用~ 
}
return carry+b[n]>=x;//所得的值比x大时,说明x小了啊,所以改变 

}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
cin>>a[i]>>b[i];
maxx=max(maxx,b[i]);//找出最大的捕鱼数目 
}
long long l=1,r=maxx,mid;
while(l<=r)//开始二分 
{
mid=(l+r)>>1;
if(check(mid))//检查啊~ 
l=mid+1;
else
r=mid-1;
}
cout<<l-1<<endl;//为什么是l-1嘞?!其实r也OK。。。但我不知道为什么 
return 0;
}

原文地址:https://www.cnblogs.com/ling-0-ling/p/5567572.html