蓝桥杯基础知识(四)

1.二分例题

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
bool check(ll x,ll a[],ll b[]){
  ll v=m;
  for(ll i=0;i<n;i++){
    if(a[i]>=x)continue;
    else if(a[i]+b[i]<x)return false;
    else if(a[i]+b[i]>=x&&v-(x-a[i])>=0){
      v-=(x-a[i]);
    }
  }
  return true;
}
int main(){
  cin>>n>>m;
  ll a[n];
  ll b[n];
  for(ll i=0;i<n;i++){
    cin>>a[i];
  }

  for(ll g=0;g<n;g++){
    cin>>b[g];
  }
  ll l=0,r=100;
  while(l<r){//只要l超过了r,那么此时我们的逼近就起到了作用。
    ll x=(l+r)>>1;
    if(check(x,a,b))l=x+1;
    else r=x-1;
  }
  cout<<l;
  return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务