fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <complex>
  4. #include <cmath>
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define ll long long
  8. #define ld long double
  9. void speed_it() {
  10. ios_base::sync_with_stdio(false);
  11. cin.tie(NULL);
  12. }
  13. void fileIO() {
  14. freopen("equal.in", "r", stdin);
  15. //freopen("equal.out", "w", stdout);
  16. }
  17. const ld EPS = 1e-9 ;
  18. using T = long double;
  19. using pt = std::complex<T>;
  20. #define x real()
  21. #define y imag()
  22. const ld PI = acos(-1.0L);
  23. T cross(pt v, pt w) {return v.x * w.y - v.y * w.x;}
  24. struct Line {
  25. pt v;
  26. T c;
  27. Line(pt p, pt q) : v(q - p), c(cross(v, p)) {}
  28. Line(T a, T b, T _c) : v({b, -a}), c(-_c) {}
  29. } ;
  30. T sq(pt p) {return p.x*p.x + p.y*p.y;}
  31. pt perp(pt p) {return {-p.y, p.x};}
  32. pt circumCenter(pt a, pt b, pt c) {
  33. b = b-a, c = c-a;
  34. assert(cross(b,c) != 0);
  35. return a + perp(b*sq(c) - c*sq(b))/cross(b,c)/(T)2;
  36. }
  37. Line bisector(Line l1, Line l2, bool interior) {
  38. assert(cross(l1.v, l2.v) != 0);
  39. T sign = interior ? 1 : -1;
  40. return {l2.v/abs(l2.v) + l1.v/abs(l1.v) * sign , l2.c/abs(l2.v) + l1.c/abs(l1.v) * sign};
  41. }
  42. bool line_inter(Line l1, Line l2, pt& out) {
  43. T d = cross(l1.v, l2.v);
  44. if (std::abs(d) < EPS) return false;
  45. out = (l2.v * l1.c - l1.v * l2.c) / d;
  46. return true;
  47. }
  48. signed main() {
  49. speed_it() ;
  50. //fileIO() ;
  51. ll l , b ; cin >> l >> b ;
  52. T y1 =sqrt(l*l-b*b/4.0) ;
  53. pt A = {(T)(-b/2.0) , 0.0} , B = {(T)(b/2.0) , 0.0 }, C = {0.0 , y1} ;
  54. if (2*l <= b ) {
  55. cout << -1 ;
  56. return 0 ;
  57. }
  58. Line l1 (A , B) ;
  59. Line l2(A , C) ;
  60. Line l3 (B,C) ;
  61. pt center = circumCenter(A , B , C) ;
  62. Line b1 =bisector(l1 , l2 , 1 ) ;
  63. Line b2 = bisector(l1 , l3 , 0) ;
  64. pt out ;
  65. line_inter(b1 , b2 , out ) ;
  66. cout << fixed << setprecision(6) << abs(center.y - out.y) << endl ;
  67. return 0;
  68. }
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
38732876802466213.722656