Advertisement
Guest User

USACO Contest March 2014 - Sabotage

a guest
Mar 11th, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <cstdio>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("sabotage.in");
  7. FILE *fout = fopen("sabotage.out", "w");
  8.  
  9. double L[100005], M[100005], R[100005];
  10. int N;
  11.  
  12. bool ok(double k)
  13. {
  14.     for(int i = 1; i <= N; i++)
  15.         L[i] = L[i-1] + M[i] - k;
  16.  
  17.     double minRight = 999999;
  18.  
  19.     R[N] = M[N] - k;
  20.     R[N-1] = R[N] + M[N-1] - k;
  21.  
  22.     for(int i = N-2; i >= 1; i--)
  23.     {
  24.         minRight = min(minRight, R[i+2]);
  25.  
  26.         if(minRight + L[i] <= 0)
  27.             return true;
  28.  
  29.         R[i] = R[i+1] + M[i] - k;
  30.     }
  31.  
  32.     return false;
  33. }
  34.  
  35. int main()
  36. {
  37.     fin >> N;
  38.  
  39.     for(int i = 1; i <= N; i++)
  40.         fin >> M[i];
  41.  
  42.     double a = 1, b = 10005;
  43.     double p = (a+b) / 2;
  44.  
  45.     for(int i = 1; i <= 100; i++)
  46.     {
  47.         if(ok(p))
  48.             b = p;
  49.         else
  50.             a = p;
  51.  
  52.         p = (a+b) / 2;
  53.     }
  54.  
  55.     fprintf(fout, "%.3f\n", p);
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement