输入样例1:
4
1 2 3 4
输出样例1:
0.500000
1.500000 2.500000 3.500000
输入样例2:
3
10 20 30
输出样例2:
0
10.000000 20.000000 30.000000
输入样例3:
5
10003 10004 10001 10002 1
输出样例3:
0.500000
1.000000 10001.500000 10003.500000
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,x[N];vector<double>dist;
bool check(double r){
dist.clear();
dist.push_back(x[0]+r);
for(int i=1;i<n;i++){
if(x[i]>dist.back()+r){
if(dist.size()==3)return false;
dist.push_back(x[i]+r);//!!!
}
}
return true;
}
int main(){
cin>>n;for(int i=0;i<n;i++)cin>>x[i];
sort(x,x+n);double l=0,r=(x[n-1]-x[0])/2;
while(r-l>1e-7){
double mid=(l+r)/2;
if(check(mid))r=mid;else l=mid;
}
printf("%lf\n",r);
check(r);
while (dist.size()<3) dist.push_back(x[0]);
for (auto t: dist)
printf("%lf ", t);
return 0;
}