Advertisement
juanjo12x

p1

Nov 7th, 2014
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <string>
  6. #include <cctype>
  7. #include <stack>
  8. #include <bitset>
  9. #include <queue>
  10. #include <list>
  11. #include <vector>
  12. #include <map>
  13. #include <set>
  14. #include <iterator>
  15. #include <sstream>
  16. #include <stdlib.h>
  17. #include <cmath>
  18. #define FOR(i,A) for(typeof (A).begin() i = (A).begin() ; i != (A).end() ; i++)
  19. #define f(i,a,b) for(int i = a ; i < b ; i++)
  20. #define fd(i,a,b) for(int i = a ; i >= b ; i--)
  21. #define debug( x ) cout << #x << " = " << x << endl
  22. #define clr(v,x) memset( v, x , sizeof v )
  23. #define all(x) (x).begin() , (x).end()
  24. #define mp make_pair
  25. #define rall(x) (x).rbegin() , (x).rend()
  26. #define PI acos( -1.0 )
  27. #define EPS 1E-4
  28. #define TAM 100010
  29.    
  30. using namespace std;
  31.    
  32. typedef pair<int,int> ii ;
  33. typedef long long ll ;
  34. typedef long double ld ;
  35. typedef pair<int,ii> pii ;
  36. typedef vector <ii> vii;
  37. typedef vector<int> vi;
  38. double W,D,A;
  39. int K;
  40. double p1[10], q1[10], p2[10], q2[10];
  41. //la evaluación se hace siguiendo la regla de horner :O
  42. //he ggeado
  43. //http://en.wikipedia.org/wiki/Horner%27s_method
  44. double func(double x, double valor) {
  45.     double num1, den1, num2, den2;
  46.     num1 = num2 = den1 = den2 = 0.0;
  47.     fd(i,K,0) {
  48.         num1 = num1*x + p1[i];
  49.         den1 = den1*x + q1[i];
  50.         num2 = num2*x + p2[i];
  51.         den2 = den2*x + q2[i];
  52.     }
  53.  
  54.     double integral1, integral2;
  55.     integral1 = num1 / den1;
  56.     integral2 = num2 / den2;
  57.  
  58.     if (valor > integral1) {
  59.         return 0;
  60.     }
  61.     else if (valor < integral2) {
  62.         return integral1 - integral2;
  63.     }
  64.     else return integral1 - valor;
  65. }
  66. int main() {
  67.      while(scanf("%lf %lf %lf %d",&W,&D,&A,&K)!=EOF){
  68.          f(i,0,K+1) {
  69.             scanf("%lf", &p1[i]);
  70.         }
  71.  
  72.         f(i,0,K+1){
  73.             scanf("%lf", &q1[i]);
  74.         }
  75.  
  76.         f(i,0,K+1){
  77.             scanf("%lf", &p2[i]);
  78.         }
  79.  
  80.         f(i,0,K+1){
  81.             scanf("%lf", &q2[i]);
  82.         }
  83.          
  84.         double x, low, high;
  85.         low = -D; high = 0.0;
  86.         f(i,0,23){//ejecutando, esto da la precisión deseada
  87.             double totA=0.0;
  88.             double x=(low+high)/2.0;
  89.             for (double a=0.0 ; a+EPS-1e-5<W ; a += EPS) {
  90.                 double b = a + EPS;
  91.                 //regla de simpson
  92.                 //http://es.wikipedia.org/wiki/Regla_de_Simpson
  93.                 totA += ((b - a) / 6.0) * (func(a, x) + (4 * func((a+b) / 2.0, x)) + func(b, x));
  94.             }
  95.              
  96.             if (totA< A) {
  97.                 high = x;
  98.             }
  99.             else {
  100.                 low = x;
  101.             }
  102.         }
  103.         printf("%.5lf\n",(-1)*low);
  104.      }
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement