#include<bits/stdc++.h>
using namespace std;
unsigned long long n,w,L;//w订单树高 l最低树高
unsigned long long a[200010];
unsigned long long Tree[200010][2];//0初始高度 1每月高度
bool check(unsigned long long x){
unsigned long long ans=0;
for(unsigned long long i=0;i<n;i++){
unsigned long long Now=Tree[i][0]+Tree[i][1]*x;
if(Now>L)ans+=Now;
}
if(ans>=w)return true;
return false;
}
int main(){
cin>>n>>w>>L;
for(unsigned long long i=0;i<n;i++){
cin>>Tree[i][0];
}
for(unsigned long long i=0;i<n;i++){
cin>>Tree[i][1];
}//luogu input
// for(unsigned long long i=0;i<n;i++){
// cin>>Tree[i][0]>>Tree[i][1];
// }//vjudge input
int ANS=0;
for(int i=0;i<n;i++){
if(Tree[i][0]>L&&Tree[i][0]>w){
// cout<<1;
cout<<0;
return 0;
}else if(Tree[i][0]>L){
ANS+=Tree[i][0];
}
}
// cout<<ANS;
if(ANS>=w){
cout<<0;
return 0;
}
unsigned long long l=1,r=1e18+1;
unsigned long long ans=1;
while(l<=r){
unsigned long long mid=l+(r-l)/2;
// cout<<mid<<" ";
// if(mid==0){
// cout<<0;
// return 0;
// }
if(check(mid)){
r=mid-1;
// ans=r+1;
// if(r==0){
//// cout<<1;
// cout<<0;
// return 0;
// }
// cout<<"r:"<<r<<endl;
// ans=mid;
}else{
l=mid+1;
ans=l;
// cout<<"l:"<<l<<endl;
}
}
cout<<ans;
return 0;
}
爆了两个:
描述都是一样的,应输出0,实则输出1