Advertisement
Guest User

Untitled

a guest
Sep 29th, 2014
651
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. typedef long double ld;
  7. typedef long long ll;
  8.  
  9. const ld pi = acos(-1.0l);
  10.  
  11. int t;
  12. int gx, gy, gr;
  13. int vx, vy, vr;
  14.  
  15. ld Area(ld r) { return pi * r * r; }
  16.  
  17. ll squareDist() { return ll(gx - vx) * (gx - vx) + ll(gy - vy) * (gy - vy); }
  18.  
  19. ld Cut(ld r, ld a)
  20. {
  21.     ld hs = a / (2.0l * r);
  22.     if (hs < -1) hs = -1;
  23.     else if (hs > 1) hs = 1;
  24.     ld alpha = 2.0l * asin(hs);
  25.     return r * r / 2 * (alpha - sin(alpha));
  26. }
  27.  
  28. ld Intersection()
  29. {
  30.     if (gr > vr) { swap(gx, vx); swap(gy, vy); swap(gr, vr); }
  31.     ll sD = squareDist();
  32.     if (sD >= ll(vr + gr) * (vr + gr)) return 0.0l;
  33.     if (ll(vr - gr) * (vr - gr) >= sD) return Area(gr);
  34.     ld D = sqrt(ld(sD));
  35.     ld a = (ld(gr) * gr + ld(sD) - ld(vr) * vr) / (2.0l * D);
  36.     ld h = 2.0l * sqrt(ld(gr) * gr - a * a);
  37.     return Cut(vr, h) + (a >= 0? Cut(gr, h): Area(gr) - Cut(gr, h));
  38. }
  39.  
  40. int main()
  41. {
  42.     scanf("%d", &t);
  43.     for (int tc = 1; tc <= t; tc++) {
  44.         scanf("%d %d %d", &gx, &gy, &gr);
  45.         scanf("%d %d %d", &vx, &vy, &vr);
  46.         printf("Case #%d: %.10lf\n", tc, double(Area(gr) - Intersection()));
  47.     }
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement