Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. typedef long double ld;
  7.  
  8. ld step = 0.1;
  9. int iters = 50;
  10.  
  11. int main() {
  12.   int t = 0;
  13.   std::cin >> t;
  14.   while (t--) {
  15.     ld r, h, a, b;
  16.     cin >> r >> h >> a >> b;
  17.     ld ans = 0;
  18.     ld xv1 = -a;
  19.     ld yv1 = 0;
  20.     ld zv1 = h;
  21.     ld xv2 = b;
  22.     ld yv2 = 0;
  23.     ld zv2 = h;
  24.     for (ld x = -r; x <= r; x += step) {
  25.       for (ld y = -r; y <= r; y += step) {
  26.         if (x * x + y * y < r * r) {
  27.           ld lo = 0;
  28.           ld hi = h;
  29.           int iter = 0;
  30.           while (iter++ < iters) {
  31.             ld mid = (lo + hi) / 2;
  32.             ld k = (-mid) / (zv1 - mid);
  33.             ld x1 = (xv1 - x) * k + x;
  34.             ld y1 = (yv1 - y) * k + y;
  35.             ld x2 = (xv2 - x) * k + x;
  36.             ld y2 = (yv2 - y) * k + y;
  37.             if (x1 * x1 + y1 * y1 < r * r && x2 * x2 + y2 * y2 < r * r) {
  38.               lo = mid;
  39.             } else {
  40.               hi = mid;
  41.             }
  42.           }
  43.           cout << std::fixed << setprecision(20) << x << " " << y << " " << lo << "\n";
  44.           ans += lo * step * step;
  45.         }
  46.       }
  47.     }
  48.     cout << setprecision(20) << ans << "\n";
  49.     cout << (long long) (ans * 10) << "\n";
  50.   }
  51.   return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement