Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void solve(__attribute__((unused)) bool read) {
- int n;
- cin >> n;
- vector<double> p(n);
- vector<pair<int, int>> a(n);
- vector<Event> events;
- for (int i = 0; i < n; ++i) {
- int p0;
- cin >> a[i].first >> a[i].second >> p0;
- p[i] = p0 / 100.;
- events.push_back({1, a[i].first, i});
- events.push_back({-1, a[i].second, i});
- }
- sort(all(events));
- double res = 0;
- double log_prod = 0;
- int sign = 1;
- int open_halves = 0;
- for (int w = 0; w + 1 < events.size(); ++w) {
- auto ev = events[w];
- auto cur_p = p[ev.id];
- int is_half = fabs(cur_p - 0.5) < 1e-9;
- if (is_half) {
- open_halves += ev.type;
- }
- else if (cur_p > 0.5) {
- sign = -sign;
- log_prod += ev.type * log(2 * cur_p - 1);
- } else {
- log_prod += ev.type * log(1 - 2 * cur_p);
- }
- double odd_prob = (1 - exp(log_prod) * sign) / 2.0;
- if (open_halves > 0) {
- odd_prob = 0.5;
- }
- res += (events[w + 1].x - events[w].x) * odd_prob;
- }
- cout << res << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement