社区讨论

站外题求调

学术版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m6mzrkz8
此快照首次捕获于
2025/02/02 10:17
去年
此快照最后确认于
2025/02/02 18:03
去年
查看原帖
MY Code:
CPP
#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

回复

1 条回复,欢迎继续交流。

正在加载回复...