Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- using namespace std;
- vector<int> L;
- vector<int> R;
- vector<int> A;
- int n;
- long double prob = 0;
- int bound;
- long double E = 0;
- bool check()
- {
- int lo = 0;
- int eq = 0;
- int hi = 0;
- for (int i = 0; i < n; ++i)
- {
- if (A[i] == 0)
- {
- if (R[i] < bound)
- return false;
- if (L[i] > bound)
- return false;
- eq += 1;
- }
- else if (A[i] > 0)
- {
- if (R[i] <= bound)
- return false;
- hi += 1;
- }
- else
- {
- if (L[i] >= bound)
- return false;
- lo += 1;
- }
- }
- if (hi == 1 && eq >= 1)
- return true;
- if (hi == 0 && eq >= 2)
- return true;
- return false;
- }
- long double calc_prob()
- {
- long double ans = 1.0;
- long double ONE = 1.0;
- for (int i = 0; i < n; ++i)
- {
- if (A[i] == 0)
- ans *= ONE / (R[i] - L[i] + 1);
- else if (A[i] == 1)
- ans *= (long double)(R[i] - max(L[i], bound + 1) + 1) / (R[i] - L[i] + 1);
- else
- ans *= (long double)(min(R[i], bound - 1) - L[i] + 1) / (R[i] - L[i] + 1);
- }
- return ans;
- }
- int main()
- {
- cin >> n;
- L.resize(n);
- R.resize(n);
- int i, m, j, d, d1;
- for (i = 0; i < n; ++ i)
- {
- cin >> L[i] >> R[i];
- }
- m = 1;
- for (i = 0; i < n; ++i)
- m *= 3;
- for (bound = 1; bound <= 10000; ++bound)
- {
- prob = 0;
- for (d = 0; d < m; ++d)
- {
- A.clear();
- d1 = d;
- for (i = 0; i < n; ++i)
- {
- A.push_back(d1 % 3 - 1);
- d1 /= 3;
- }
- if (check())
- {
- prob += calc_prob();
- }
- }
- E += bound * prob;
- }
- cout.precision(16);
- cout << (double) E << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement