Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. double sqrtQuake(double number) {
  5.   using std::int64_t;
  6.       double ynum = number;
  7.       double x2num = ynum * 0.5;
  8.       int64_t inum = reinterpret_cast<int64_t>(
  9.                     (reinterpret_cast<int64_t*>(&ynum)));
  10.       inum = 0x5fe6eb50c7b537a9 - (inum >> 1);
  11.       ynum = *(reinterpret_cast<double*>(&inum));
  12.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  13.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  14.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  15.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  16.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  17.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  18.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  19.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  20.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  21.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  22.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  23.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  24.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  25.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  26.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  27.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  28.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  29.       ynum = ynum * (1.5 - (x2num * ynum * ynum));
  30.       return 1 / ynum;
  31. }
  32.  
  33.  
  34. void swap_s(int& al, int& bl) {
  35.   int temp = al;
  36.   al = bl;
  37.   bl = temp;
  38. }
  39.  
  40. inline double sqr(double num) {
  41.   return num * num;
  42. }
  43.  
  44. inline double max(double num, double snum) {
  45.   return (num + snum + abs(num - snum)) * 0.5;
  46. }
  47.  
  48. inline double min(double num, double snum) {
  49.   return (num + snum - abs(num - snum)) * 0.5;
  50. }
  51.  
  52. inline double getSin(double num) {
  53.   return sqrtQuake(1 - num * num);
  54. }
  55.  
  56. int main() {
  57.   using std::cout;
  58.   using std::cin;
  59.  
  60.   int al = 0;
  61.   int bl = 0;
  62.   int cl = 0;
  63.   int dl = 0;
  64.   int el = 0;
  65.  
  66.   double discrim = 0;
  67.   double x1num = 0;
  68.   double x2num = 0;
  69.   double returnsin = 0;
  70.   bool skipdiscrim = false;
  71.  
  72.   cin >> al >> bl >> cl >> dl >> el;
  73.  
  74.   // "quick" sort
  75.   if (cl > bl) {
  76.     swap_s(cl, bl);
  77.     if (bl > al) {
  78.       swap_s(bl, al);
  79.     }
  80.     if (cl > bl) {
  81.       swap_s(cl, bl);
  82.     }
  83.   } else {
  84.     if (bl > al) {
  85.       swap_s(bl, al);
  86.       if (cl > al) {
  87.         swap_s(cl, al);
  88.       }
  89.     }
  90.   }
  91.   if (dl > el) {
  92.     swap_s(dl, el);
  93.   }
  94.  
  95.  
  96.   if ((al <= dl && bl <= el) || (al <= el && bl <= dl)) {
  97.       cout << "YES" << "\n";
  98.       return 0;
  99.   } else {
  100.     if (( cl <= dl && bl <= el) || (cl <= el && bl <= dl)) {
  101.       cout << "YES" << "\n";
  102.       return 0;
  103.     } else {
  104.       if ((al <= dl && cl <= el) || (al <= el && cl <= dl)) {
  105.         cout << "YES" << "\n";
  106.         return 0;
  107.       }
  108.     }
  109.   }
  110.   double discrimab = 4 * (sqr(al) * sqr(dl)
  111.                    + (sqr(al) + sqr(bl)) * (sqr(dl) - sqr(bl)));
  112.   double discrimac = 4 * (sqr(al) * sqr(dl)
  113.                    + (sqr(al) + sqr(bl)) * (sqr(dl) - sqr(bl)));
  114.   double discrimbc = 4 * (sqr(bl) * sqr(dl)
  115.                    + (sqr(bl) + sqr(cl)) * (sqr(dl) - sqr(cl)));
  116.  
  117.  
  118.  
  119.   double abrootone = (2 * al * dl
  120.                   + sqrtQuake(discrimab))
  121.                   / (2 * (sqr(al) + sqr(bl)));
  122.   double abroottwo = (2 * al * dl
  123.                   - sqrtQuake(discrimab))
  124.                   / (2 * (sqr(al) + sqr(bl)));
  125.  
  126.   double acrootone = (2 * al * dl
  127.                   + sqrtQuake(discrimac))
  128.                   / (2 * (sqr(al) + sqr(cl)));
  129.  
  130.   double acroottwo = (2 * al * dl
  131.                   - sqrtQuake(discrimac))
  132.                   / (2 * (sqr(al) + sqr(cl)));
  133.  
  134.   double bcrootone = (2 * bl * dl
  135.                   - sqrtQuake(discrimbc))
  136.                   / (2 * (sqr(bl) + sqr(cl)));
  137.  
  138.   double bcroottwo = (2 * bl * dl
  139.                   + sqrtQuake(discrimbc))
  140.                   / (2 * (sqr(bl) + sqr(cl)));
  141.  
  142.   if((discrimab > 0 && al * getSin(abrootone) + bl * abrootone <= el
  143.   || al * getSin(abroottwo) + bl * abroottwo <= el)
  144.   || (discrimac > 0 && al * getSin(acrootone) + cl * acrootone <= el
  145.   || al * getSin(acroottwo) + cl * acroottwo <= el)
  146.   || (discrimbc > 0 && bl * getSin(bcrootone) + cl * acrootone <= el
  147.   || bl * getSin(bcroottwo) + cl * acroottwo <= el)) {
  148.     cout << "YES" << "\n";
  149.   } else {
  150.     cout << "NO" << "\n";
  151.   }
  152.   // ПЕРЕМОГА ИЛИ ЗРАДА?
  153.   return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement