汀博尔

题目

ac代码

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
struct tree
{
    
    
	ll h;
	ll a;
}m[200009];
ll n,s,l;
bool solve(ll x)
{
    
    
	ll ans = s;
	for(int i = 0; i < n; i++)
	{
    
    
		if(m[i].h+m[i].a*x>=l) {
    
    
			ans-=(m[i].h+m[i].a*x);
			if(ans<=0) return true; 
		}
	}
	return false;
}
int main()
{
    
    
	ll ol=0;
	cin >> n >> s >> l;
	for(int i=0;i<n;i++) scanf("%lld",&m[i].h);
	for(int i=0;i<n;i++) {
    
    
		scanf("%lld",&m[i].a);
		 ol=max(ol,m[i].a);
	}
	ll l=-1,r=1e18/ol+1;
	while(l+1<r)
	{
    
    
		ll mid = l + (r-l)/2;
		if(solve(mid)) r = mid ;
		else l = mid ;
	}
	cout << r << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/cosx_/article/details/111998275