蓝桥杯基础知识(四)
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; }