搜狗最远点对加360然后二分
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector< double > data(n * 2); for (int i = 0; i < n; i++) { scanf("%lf", &data[i * 2]); data[i * 2 + 1] = data[i * 2] + 360; } sort (data.begin(), data.end()); double ans = 0; for (int i = 0; i < n; i++) { auto r = upper_bound(data.begin(), data.end(), (data[i] + 180.0)); auto l = r - 1; ans = max(ans, max (*l - data[i], 360 - *r + data[i]) ); } printf("%.8f", ans); return 0; }