Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <map>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- const long double pi = 3.141592653589793238462643383279;
- int n;
- vector<pair<long double, long double> > a;
- bool func(pair<long double, long double> a, pair<long double, long double> b) {
- long double p1 = (a.first * 1 - a.second * 0) / sqrt(a.first * a.first + a.second * a.second);
- long double p2 = (b.first * 1 - b.second * 0) / sqrt(b.first * b.first + b.second * b.second);
- p1 = acosl(p1);
- p2 = acosl(p2);
- if (a.second < 0)
- p1 *= -1.0;
- if (b.second < 0)
- p2 *= -1.0;
- return p1 < p2;
- }
- int main() {
- cin >> n;
- a.resize(n);
- for (int i = 0; i < n; i++) {
- scanf("%lf%lf", &a[i].first, &a[i].second);
- }
- sort(a.begin(), a.end(), func);
- long double maxx = 0;
- int pos = 0;
- for (int i = 0; i < n; i++) {
- pair<long double, long double> c, d;
- c = a[i], d = a[(i + 1) % n];
- long double p1 = (c.first * 1 - c.second * 0) / sqrt(c.first * c.first + c.second * c.second);
- long double p2 = (d.first * 1 - d.second * 0) / sqrt(d.first * d.first + d.second * d.second);
- p1 = acosl(p1);
- p2 = acosl(p2);
- if (c.second < 0)
- p1 *= -1.0;
- if (d.second < 0)
- p2 *= -1.0;
- long double ans = 0.0;
- if (p1 < 0 && p2 > 0) {
- ans = max(p2 + abs(p1), 2 * pi - (p2 + abs(p1)) );
- } else if (p1 > 0 && p2 < 0) {
- ans = max(p1 + abs(p2), 2 * pi - (p1 + abs(p2)) );
- } else {
- ans = (max(abs(p1), abs(p2)) - min(abs(p1), abs(p2)));
- }
- maxx = max(ans, maxx);
- }
- printf("%.10lf", maxx * (180.0 / pi));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment