prestige

Untitled

Jan 9th, 2013
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <map>
  5.  
  6. #include <cmath>
  7. #include <algorithm>
  8.  
  9. using namespace std;
  10. const long double pi = 3.141592653589793238462643383279;
  11. int n;
  12. vector<pair<long double, long double> > a;
  13. bool func(pair<long double, long double> a, pair<long double, long double> b) {
  14. long double p1 = (a.first * 1 - a.second * 0) / sqrt(a.first * a.first + a.second * a.second);
  15. long double p2 = (b.first * 1 - b.second * 0) / sqrt(b.first * b.first + b.second * b.second);
  16. p1 = acosl(p1);
  17. p2 = acosl(p2);
  18. if (a.second < 0)
  19. p1 *= -1.0;
  20. if (b.second < 0)
  21. p2 *= -1.0;
  22. return p1 < p2;
  23. }
  24. int main() {
  25. cin >> n;
  26. a.resize(n);
  27. for (int i = 0; i < n; i++) {
  28. scanf("%lf%lf", &a[i].first, &a[i].second);
  29. }
  30. sort(a.begin(), a.end(), func);
  31. long double maxx = 0;
  32. int pos = 0;
  33. for (int i = 0; i < n; i++) {
  34. pair<long double, long double> c, d;
  35. c = a[i], d = a[(i + 1) % n];
  36. long double p1 = (c.first * 1 - c.second * 0) / sqrt(c.first * c.first + c.second * c.second);
  37. long double p2 = (d.first * 1 - d.second * 0) / sqrt(d.first * d.first + d.second * d.second);
  38. p1 = acosl(p1);
  39. p2 = acosl(p2);
  40. if (c.second < 0)
  41. p1 *= -1.0;
  42. if (d.second < 0)
  43. p2 *= -1.0;
  44. long double ans = 0.0;
  45. if (p1 < 0 && p2 > 0) {
  46. ans = max(p2 + abs(p1), 2 * pi - (p2 + abs(p1)) );
  47. } else if (p1 > 0 && p2 < 0) {
  48. ans = max(p1 + abs(p2), 2 * pi - (p1 + abs(p2)) );
  49. } else {
  50. ans = (max(abs(p1), abs(p2)) - min(abs(p1), abs(p2)));
  51. }
  52. maxx = max(ans, maxx);
  53. }
  54. printf("%.10lf", maxx * (180.0 / pi));
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment