站外题求调
  • 板块学术版
  • 楼主Roronoa__Zoro
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/2/2 10:16
  • 上次更新2025/2/2 18:03:10
查看原帖
站外题求调
1018162
Roronoa__Zoro楼主2025/2/2 10:16

MY Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[300005];
int b[300005];
int n;
bool check(int m){
	int L=1,R=n;
	for(int i=1;i<=n;i++)b[i]=a[i];
	while(L+1<R){
		int M=(L+R)/2;
		if(b[M]>m)R=M;
		else L=M;
	}
	int j=0;
	for(int i=1;i<=n;i++){
		if(b[i]<m){
			j=L;
			break;
		}
	}
	for(int i=1;i<=n;i++){
		if(b[i]<m){
			while(b[j]-b[i]<=m){
				if(b[j]-b[i]>=m){b[j]=b[j]-b[i],b[i]=b[j];break;}
				else 
				if(j>n){
					return false;
				}
				else j++;
			}
		}
		else return true;
	}
	return true;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int l=0,r=1e9+1;
	while(l+1<r){
		int m=(l+r)/2;
		if(check(m)){
			l=m;
		}
		else{
			r=m;
		}
	}
	cout<<l<<"\n";
}

https://cdn.luogu.com.cn/upload/image_hosting/oumi92kw.png

2025/2/2 10:16
加载中...