Guest User

Untitled

a guest
Jan 13th, 2021
131
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #undef NDEBUG
  2. #ifdef SU1
  3. #define _GLIBCXX_DEBUG
  4. #endif
  5.  
  6. #include <bits/stdc++.h>
  7.  
  8. #define forn(i, n) for (int i = 0; i < int(n); i++)
  9. #define ford(i, n) for (int i = int(n) - 1; i >= 0; i--)
  10. #define fore(i, l, r) for (int i = int(l); i < int(r); i++)
  11. #define correct(x, y, n, m) (0 <= (x) && (x) < (n) && 0 <= (y) && (y) < (m))
  12. #define all(a) (a).begin(), (a).end()
  13. #define sz(a) int((a).size())
  14. #define pb(a) push_back(a)
  15. #define mp(x, y) make_pair((x), (y))
  16. #define x first
  17. #define y second
  18.  
  19. using namespace std;
  20.  
  21. typedef long long li;
  22. typedef long double ld;
  23. typedef pair<li, li> pt;
  24.  
  25. template<typename X> inline X abs(const X& a) { return a < 0? -a: a; }
  26. template<typename X> inline X sqr(const X& a) { return a * a; }
  27.  
  28. const int INF = int(1e9);
  29. const li INF64 = li(1e18);
  30. const ld EPS = 1e-9, PI = 3.1415926535897932384626433832795;
  31.  
  32. pt c[2];
  33. li r[2];
  34.  
  35. inline bool read() {
  36.     forn(i, 2) assert(cin >> c[i].x >> c[i].y >> r[i]);
  37.     return true;
  38. }
  39.  
  40. li sqd;
  41.  
  42. inline ld calc(int a, int b) {
  43.     ld cosa = ld(sqr(r[b]) + sqd - sqr(r[a])) / (ld(2) * r[b] * sqrtl(sqd));
  44.     cosa = max(ld(-1), min(ld(1), cosa));
  45.     ld sina = sqrt(max(ld(0), 1 - sqr(cosa)));
  46.     ld alpha = acosl(cosa);
  47.     ld segment = alpha * sqr(r[b]);
  48.     ld triang = sqr(r[b]) * sina * cosa;
  49.     cerr << "alpha=" << 2 * alpha << endl;
  50.     cerr << "triang=" << triang << endl;
  51.     return segment - triang;
  52. }
  53.  
  54. inline void solve() {
  55.     if (r[0] > r[1]) swap(c[0], c[1]), swap(r[0], r[1]);
  56.  
  57.     sqd = sqr(c[0].x - c[1].x) + sqr(c[0].y - c[1].y);
  58.  
  59.     if (sqd > sqr(r[0] + r[1])) {
  60.         cerr << "Not intersecting" << endl;
  61.         cout << ld(0) << endl;
  62.         return;
  63.     }
  64.  
  65.     if (sqd <= sqr(r[1] - r[0])) {
  66.         cerr << "Fully in" << endl;
  67.         cout << PI * sqr(ld(r[0])) << endl;
  68.         return;
  69.     }
  70.    
  71.     ld ans = 0;
  72.     ans += calc(0, 1);
  73.     ans += calc(1, 0);
  74.     cout << ans << endl;
  75. }
  76.  
  77. int main() {
  78. #ifdef SU1
  79.     assert(freopen("input.txt", "rt", stdin));
  80.     assert(freopen("output.txt", "wt", stdout));
  81. #endif
  82.    
  83.     cout << setprecision(10) << fixed;
  84.     cerr << setprecision(5) << fixed;
  85.  
  86.     while (read()) {
  87.         solve();
  88.         break;
  89.     }
  90.    
  91.     return 0;
  92. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×