求修正或hack!两种二分一种60分一种20分
查看原帖
求修正或hack!两种二分一种60分一种20分
1003901
Angela2022楼主2024/3/29 21:28
#include<bits/stdc++.h>
using namespace std;
#define int long long
long long n,m;
int a[200010],b[200010];
bool check(int k){
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[i]+b[i]<k)return false;
		if(a[i]<k)ans+=k-a[i];
		if(ans>m)return false;
	}
	return true;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	sort(a+1,a+n+1);
	int l=a[1],r=a[n]+m;
	while(l<r){
		int mid=(l+r+1)>>1;
		if(check(mid))l=mid;
		else r=mid-1;
		//cout<<l<<" "<<r<<endl;
	}
	cout<<l<<endl;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
long long m;
int a[200010],b[200010];
bool check(int x){
	int s=m;
	for(int i=1;i<=n;i++){
		if(b[i]>=x-a[i]&&s>=x-a[i]){
			s=s-(x-a[i]);
			//cout<<i<<" "<<s<<endl;
		}
		else {
		    return false;
		}
	}
	return true;
}
signed main(){
	cin>>n>>m;
	int mmin=2e5,mmax=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mmin=min(mmin,a[i]);
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	long long l=mmin,r=m+mmax;
	while(l<r){
		long long mid=(l+r+1)>>1;
		//cout<<l<<" "<<r<<" "<<mid<<endl;
		if(check(mid))l=mid;
		else r=mid-1;
	}
	cout<<l<<endl;
	return 0;
}
2024/3/29 21:28
加载中...