90分2点求助大佬,谢谢
查看原帖
90分2点求助大佬,谢谢
546159
lihansheng1楼主2023/8/3 22:57
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,w,L;//w订单树高 l最低树高
unsigned long long a[200010];
unsigned long long Tree[200010][2];//0初始高度 1每月高度
bool check(unsigned long long x){
	unsigned long long ans=0;
	for(unsigned long long i=0;i<n;i++){
		unsigned long long Now=Tree[i][0]+Tree[i][1]*x;
		if(Now>L)ans+=Now;
	}
	if(ans>=w)return true;
	return false;
}
int main(){
	cin>>n>>w>>L;
	for(unsigned long long i=0;i<n;i++){
		cin>>Tree[i][0];
	}
	for(unsigned long long i=0;i<n;i++){
		cin>>Tree[i][1];
	}//luogu input
//	for(unsigned long long i=0;i<n;i++){
//		cin>>Tree[i][0]>>Tree[i][1];
//	}//vjudge input
	int ANS=0;
	for(int i=0;i<n;i++){
		if(Tree[i][0]>L&&Tree[i][0]>w){
//			cout<<1;
			cout<<0;
			return 0;
		}else if(Tree[i][0]>L){
			ANS+=Tree[i][0];
		}
	}
//	cout<<ANS;
	if(ANS>=w){
		cout<<0;
		return 0;
	}
	unsigned long long l=1,r=1e18+1;
	unsigned long long ans=1;
	while(l<=r){
		unsigned long long mid=l+(r-l)/2;
//		cout<<mid<<" ";
//		if(mid==0){
//			cout<<0;
//			return 0;
//		}
		if(check(mid)){
			r=mid-1;
//			ans=r+1;
//			if(r==0){
////				cout<<1;
//				cout<<0;
//				return 0;
//			}
//			cout<<"r:"<<r<<endl;
			//			ans=mid;
		}else{
			l=mid+1;
			ans=l;
//			cout<<"l:"<<l<<endl;
		}
	}
	cout<<ans;
	return 0;
}

爆了两个: 描述都是一样的,应输出0,实则输出1

2023/8/3 22:57
加载中...