传送门
一样一个大水题。。
明显就是一个二分答案呀。。
做法很明显,就是直接二分答案,然后线性扫一遍判断就好了。。。
没了
对了,答案有超过1e9的,然后貌似要开个int128,这样才可以算
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define ll __int128
using namespace std;
inline ll read(){
ll x=;char ch=' ';int f=;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')f=-,ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<)+(x<<)+(ch^),ch=getchar();
return x*f;
}
const int N=+;
int n;
ll S,L,h[N],a[N];
inline bool check(ll mid){
ll sum=;
for(int i=;i<=n;i++){
ll tmp=h[i]+a[i]*mid;
if(tmp>=L)sum+=tmp;
if(sum>=S)return true;
}
return false;
}
int main(){
n=read();S=read();L=read();
for(int i=;i<=n;i++)h[i]=read();
for(int i=;i<=n;i++)a[i]=read();
ll l=,r=,mid;
while(l<r){
mid=(l+r)>>;
if(check(mid))r=mid;
else l=mid+;
}
printf("%lld",l);
return ;
}