求助,二分答案
查看原帖
求助,二分答案
98673
chino_33楼主2021/9/21 10:31

75分求助,找不到哪错了

#include<iostream>
#include<cstdio>
using namespace std;
#define int unsigned long long
int n,s,l,h[200003],a[200003],head=1,tail,ans;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
	return x*f;
}
bool check(int t)
{
    int x=0;
    for(int i=1;i<=n;i++)
    {
        if(h[i]+a[i]*t>=l)
            x+=h[i]+a[i]*t;
        //cout<<x<<" ";
        if(x>=s)
            return true;
    }
    return false;
}
signed main()
{
    n=read();
    s=read();
    l=read();
    for(int i=1;i<=n;i++)
        h[i]=read();
    for(int i=1;i<=n;i++)
    {
        a[i]=read();
        if(l/a[i]+1>tail)
            tail=l/a[i]+1;
    }
    while(head<tail)
    {
        if(check((head+tail)/2))
            tail=((head+tail)/2);
        else
            head=((head+tail)/2)+1;
        //cout<<head<<" "<<tail<<"\n";
    }
    cout<<head;
    return 0;
}
2021/9/21 10:31
加载中...