Advertisement
Abrar_Al_Samit

Cow Dating (USACO '19 Plat) (NlogN TLE)

Aug 4th, 2022
773
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int C = 1000000;
  5. const double err = 1e-12;
  6. void PlayGround() {
  7.   int n;
  8.   cin>>n;
  9.  
  10.   double p[n+1];
  11.   for(int i=1; i<=n; ++i) {
  12.     cin>>p[i];
  13.     p[i] /= C;
  14.   }
  15.  
  16.   double pre[n+1], presum[n+1];
  17.   pre[0] = 1;
  18.   presum[0] = 0;
  19.   for(int i=1; i<=n; ++i) {
  20.     pre[i] = pre[i-1] * (1-p[i]);
  21.     presum[i] = presum[i-1] + p[i]/(1-p[i]);
  22.   }
  23.  
  24.   double ans = 0;
  25.   for(int i=1; i<=n; ++i) {
  26.     int l = i+1, r = n;
  27.     while(l<r) {
  28.       int mid = (1+l+r)/2;
  29.       double ans1 = (pre[mid] * (presum[mid]-presum[i-1])) / pre[i-1];
  30.       double ans2 = (pre[mid-1] * (presum[mid-1]-presum[i-1])) / pre[i-1];
  31.  
  32.       if(ans1>ans2) {
  33.         l = mid;
  34.       } else {
  35.         r = mid-1;
  36.       }
  37.     }
  38.     if(l>n) --l;
  39.     ans = max(ans, (pre[l] * (presum[l]-presum[i-1]))/pre[i-1]);
  40.   }
  41.   ans += err;
  42.   cout<<(int)(ans*C)<<'\n';
  43. }
  44. int main() {
  45.   ios_base::sync_with_stdio(0);
  46.   cin.tie(0);
  47.  
  48.   freopen("cowdate.in", "r", stdin);
  49.   freopen("cowdate.out", "w", stdout);
  50.   PlayGround();
  51.   return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement