can(0)的时候会玄学返回true,导致第4,14,19个点wa了,把r的范围改为inf也没有用
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n,s,len,maxn;
struct node{
ull h,a;
}tr[200005];
bool can(ull month){
ull sum=0,t;
for(int i=1;i<=n;++i){
t=tr[i].h+month*tr[i].a;
if(t>=len){
sum+=t;
if(sum>=s) return true;
}
}
return false;
}
int main(){
cin>>n>>s>>len;
for(int i=1;i<=n;++i) scanf("%lld",&tr[i].h);
for(int i=1;i<=n;++i) scanf("%lld",&tr[i].a),maxn=maxn>tr[i].a?maxn:tr[i].a;
if(can(0)){
cout<<0<<endl;
return 0;
}
ull l=1,r=s/maxn+1,mid,ans=0;
while(l<=r){
mid=l+r>>1;
if(can(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
cout<<ans;
return 0;
}