Advertisement
Guest User

Untitled

a guest
Feb 7th, 2015
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3.  
  4. using namespace std;
  5.  
  6. vector<int> L;
  7. vector<int> R;
  8. vector<int> A;
  9. int n;
  10. long double prob = 0;
  11. int bound;
  12. long double E = 0;
  13.  
  14. bool check()
  15. {
  16.     int lo = 0;
  17.     int eq = 0;
  18.     int hi = 0;
  19.     for (int i = 0; i < n; ++i)
  20.     {
  21.         if (A[i] == 0)
  22.         {
  23.             if (R[i] < bound)
  24.                 return false;
  25.             if (L[i] > bound)
  26.                 return false;
  27.             eq += 1;
  28.         }
  29.         else if (A[i] > 0)
  30.         {
  31.             if (R[i] <= bound)
  32.                 return false;
  33.             hi += 1;
  34.         }
  35.         else
  36.         {
  37.             if (L[i] >= bound)
  38.                 return false;
  39.             lo += 1;
  40.         }
  41.     }
  42.     if (hi == 1 && eq >= 1)
  43.         return true;
  44.     if (hi == 0 && eq >= 2)
  45.         return true;
  46.     return false;
  47. }
  48.  
  49. long double calc_prob()
  50. {
  51.     long double ans = 1.0;
  52.     long double ONE = 1.0;
  53.     for (int i = 0; i < n; ++i)
  54.     {
  55.         if (A[i] == 0)
  56.             ans *= ONE / (R[i] - L[i] + 1);
  57.         else if (A[i] == 1)
  58.             ans *= (long double)(R[i] - max(L[i], bound + 1) + 1) / (R[i] - L[i] + 1);
  59.         else
  60.             ans *= (long double)(min(R[i], bound - 1) - L[i] + 1) / (R[i] - L[i] + 1);
  61.     }
  62.     return ans;
  63. }
  64.  
  65. int main()
  66. {
  67.     cin >> n;
  68.     L.resize(n);
  69.     R.resize(n);
  70.     int i, m, j, d, d1;
  71.     for (i = 0; i < n; ++ i)
  72.     {
  73.         cin >> L[i] >> R[i];
  74.     }
  75.     m = 1;
  76.     for (i = 0; i < n; ++i)
  77.         m *= 3;
  78.     for (bound = 1; bound <= 10000; ++bound)
  79.     {
  80.         prob = 0;
  81.         for (d = 0; d < m; ++d)
  82.         {
  83.             A.clear();
  84.             d1 = d;
  85.             for (i = 0; i < n; ++i)
  86.             {
  87.                 A.push_back(d1 % 3 - 1);
  88.                 d1 /= 3;
  89.             }
  90.             if (check())
  91.             {
  92.                 prob += calc_prob();
  93.             }
  94.         }
  95.         E += bound * prob;
  96.     }
  97.     cout.precision(16);
  98.     cout << (double) E << endl;
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement