Guest User

Untitled

a guest
May 31st, 2015
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <string>
  5. #include <math.h>
  6. #include <algorithm>
  7. #include <map>
  8. #define lol long long
  9. using namespace std;
  10.  
  11.  
  12. int main()
  13. {
  14.     ios_base::sync_with_stdio(0);
  15.     int t;
  16.     cin >> t;
  17.     while (t--)
  18.     {
  19.         int a1, b1, a2, b2, z;
  20.         cin >> a1 >> b1 >> a2 >> b2 >> z;
  21.        
  22.         int a = a2 - a1;
  23.         int b = b1 - b2;
  24.         if (a == 0)
  25.         {
  26.             if (b < 0)
  27.                 cout << max(z - 12, 0) << endl;
  28.             else
  29.                 cout << 0 << endl;
  30.             continue;
  31.         }
  32.         if (b == 0)
  33.         {
  34.             if (a < 0)
  35.                 cout << z << endl;
  36.             else
  37.                 cout << 0 << endl;
  38.             continue;
  39.         }
  40.         bool swapped = 0;
  41.         if (a > 0)
  42.         {
  43.             swapped = 1;
  44.             a *= -1;
  45.             b *= -1;
  46.         }
  47.         double answ;
  48.         if (a + b < 0)
  49.         {
  50.             answ = z;
  51.             if (swapped)
  52.                 answ = 0;
  53.         }
  54.         else
  55.         {
  56.             int x;
  57.             int l = 0;
  58.             int r = z / 24;
  59.             while (l <= r)
  60.             {
  61.                 int m = (l + r) >> 1;
  62.                 int am = (b + a) * m;
  63.                 if (am - b >= 0)
  64.                     r = m - 1;
  65.                 else
  66.                 {
  67.                     x = m;
  68.                     l = m + 1;
  69.                 }
  70.             }
  71.             lol smu = (a + b) * x * 1ll * (x - 1) / 2;
  72.             lol smd = (a + b) * x * 1ll * (x + 1) / 2;
  73.             answ = (2 * x - smu * 1. / (-a) - smd * 1. / b) * 12;
  74.            
  75.             int left = z % 24;
  76.             int l1 = min(left, 12);
  77.             int l2 = max(0, left - 12);
  78.             double w1 = (b + a) * x + a * l1 / 12.;
  79.             if (w1 < 0)
  80.             {
  81.                 answ += w1 / a * 12;
  82.                 double w2 = (b + a) * x + a + b * l2 / 12.;
  83.                 if (w2 > 0)
  84.                     answ += 12*(-((b + a) * x + a + 0.)/b);
  85.                 else
  86.                     answ += l2;
  87.             }
  88.            
  89.             if (swapped)
  90.                 answ = z - answ;
  91.  
  92.         }
  93.         cout.precision(9);
  94.         cout << fixed << answ << endl;
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment