Advertisement
MarioYC

Regional 2012 E

Nov 12th, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. #define MAXK 8
  7. #define PARTS 250000
  8.  
  9. int W,D,A,K;
  10. double p1[MAXK + 1],q1[MAXK + 1];
  11. double p2[MAXK + 1],q2[MAXK + 1];
  12. double f1[2 * PARTS + 1],f2[2 * PARTS + 1];
  13.  
  14. void precalc(int pos, double x){
  15.     double P1 = 0,Q1 = 0,P2 = 0,Q2 = 0;
  16.    
  17.     for(int i = K;i >= 0;--i){
  18.         P1 = P1 * x + p1[i];
  19.         Q1 = Q1 * x + q1[i];
  20.         P2 = P2 * x + p2[i];
  21.         Q2 = Q2 * x + q2[i];
  22.     }
  23.    
  24.     f1[pos] = P1 / Q1;
  25.     f2[pos] = P2 / Q2;
  26. }
  27.  
  28. double calc(int pos, double mi){
  29.     return max(f1[pos],mi) - max(mi,f2[pos]);
  30. }
  31.  
  32. int main(){
  33.     while(scanf("%d %d %d %d",&W,&D,&A,&K) == 4){
  34.         for(int i = 0;i <= K;++i) scanf("%lf",&p1[i]);
  35.         for(int i = 0;i <= K;++i) scanf("%lf",&q1[i]);
  36.         for(int i = 0;i <= K;++i) scanf("%lf",&p2[i]);
  37.         for(int i = 0;i <= K;++i) scanf("%lf",&q2[i]);
  38.         double dx = (double)W / 2 / PARTS;
  39.        
  40.         for(int i = 0,pos = 0;i <= 2*PARTS;++i)
  41.             precalc(pos++,i * dx);
  42.        
  43.         double lo = 0,hi = -D,mi;
  44.        
  45.         for(int it = 0;it < 25;++it){
  46.             mi = (lo + hi) / 2.0;
  47.            
  48.             double aux = 0;
  49.            
  50.             for(int i = 0,pos = 0;i < PARTS;++i,pos += 2)
  51.                 aux += calc(pos,mi) + 4*calc(pos + 1,mi) + calc(pos + 2,mi);
  52.            
  53.             aux *= (double)dx / 3;
  54.            
  55.             if(aux > A) hi = mi;
  56.             else lo = mi;
  57.         }
  58.        
  59.         printf("%.5f\n",-lo);
  60.     }
  61.    
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement