思路,二分查找。复杂度,O(NlogN) #include <cstdio>
#include <algorithm>
using namespace std;
int main(){
int n;
scanf("%d",&n);
double res = 0;
double a[n];
for(int i=0;i<n;++i){
scanf("%lf",&a[i]);
}
for(int i=0;i<n;++i){
if(a[i]<180){
double tem = a[i]+180;
if(tem>=360) tem -= 360;
auto it = upper_bound(a,a+n,tem);
int loc = it-a;
if(loc==n){
res = max(res,a[n-1]-a[i]);
}else{
res = max(res,360-a[loc]+a[i]);
if(loc-1>0){
res = max(res,a[loc-1]-a[i]);
}
}
}else{
double tem = a[i] -180;
auto it = upper_bound(a,a+n,tem);
int loc = it-a;
res = max(res,a[i]-a[loc]);
if(loc>0){
res = max(res,a[loc-1]+360-a[i]);
}else if(loc==0){
res = max(a[n-1]-a[i],res);
}
}
}
printf("%.8lf\n",res);
}