搜狗算法工程师编程题(求圆上的距离) 状态:已更新
#include<algorithm>
#include<string>
#include<stdlib.h>
#include<map>
#include<vector>
#include<memory.h>
#include<set>
#include<stdio.h>
#define EPS 1e-9
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
double a[1000000];
int flagg=-1;
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);//a[i];
if(a[i]-180.0>0){
if(flagg==-1)
flagg=i;
}
}
if(flagg==-1){
printf("%0.8lf\n",a[n-1]-a[0]);
}
else {
double anss=a[n-1]-a[flagg];
if(a[flagg-1]-a[0]>anss) anss=a[flagg-1]-a[0];
for(int i=0;i<flagg;i++){
int k=lower_bound(a,a+n,180.0+a[i])-a;
if(k<n){
if(a[k]-a[i]<180){
if(anss<a[k]-a[i]) anss=a[k]-a[i];
k++;
if(k<n)
if(anss<360-a[k]+a[i]) anss=360-a[k]+a[i];
}
if(a[k]-a[i]>180){
if(anss<360-a[k]+a[i]) anss=360-a[k]+a[i];
k--;
if(k>=0){
if(anss<a[k]-a[i]) anss=a[k]-a[i];
}
}
if(a[k]-a[i]==180.0){
anss=180.00;
break;
}
}
}
printf("%0.8lf\n",anss);
}
}


