天天看點

[codeplus 11月月賽]T2 timber

傳送門

一樣一個大水題。。

明顯就是一個二分答案呀。。

做法很明顯,就是直接二分答案,然後線性掃一遍判斷就好了。。。

沒了

對了,答案有超過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 ;
}