用long long就有第1,2组过不了,改成unsigned long long就过了。
难道前两组数据有负值!!!
#include <cstdio>
using namespace std;
const int N=2e5+10;
typedef long long LL;
LL s,l;
int n,h[N],d[N];
bool check(LL x){
	LL cnt=0;
	for(int i=0;i<n;i++){
		LL t=h[i]+d[i]*x;
		if(t>=l) cnt+=t;
		if(cnt>=s) break;
	}
	if(cnt>=s) return true;
	return false;
}
int main(){
	scanf("%d%lld%lld",&n,&s,&l);
	for(int i=0;i<n;i++) scanf("%d",&h[i]);
	for(int i=0;i<n;i++) scanf("%d",&d[i]);
	LL l=0,r=1e18;
	while(l<r){
		LL mid=(l+r)/2;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	printf("%lld\n",l);
	return 0;
}
拜托各位大佬,先谢谢!