85pts,求助
查看原帖
85pts,求助
429849
xiaolifeibiao163楼主2022/11/13 15:11

can(0)的时候会玄学返回true,导致第4,14,19个点wa了,把r的范围改为inf也没有用

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull n,s,len,maxn;
struct node{
	ull h,a;
}tr[200005];
bool can(ull month){
	ull sum=0,t;
	//cout<<month<<endl;
	for(int i=1;i<=n;++i){
		t=tr[i].h+month*tr[i].a;
		if(t>=len){
			sum+=t;
			if(sum>=s) return true;
		}
	}
	return false;
}
int main(){
	cin>>n>>s>>len;
	for(int i=1;i<=n;++i) scanf("%lld",&tr[i].h);
	for(int i=1;i<=n;++i) scanf("%lld",&tr[i].a),maxn=maxn>tr[i].a?maxn:tr[i].a;
	if(can(0)){
		cout<<0<<endl;
		return 0;
	}
	ull l=1,r=s/maxn+1,mid,ans=0;
	while(l<=r){
		mid=l+r>>1;
		if(can(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}
2022/11/13 15:11
加载中...