fork(2) download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. double F(double, double, double, double);
  8. double f(double, double, double, double);
  9. double sum(double, double, double, int, double, double);
  10.  
  11.  
  12. const double EPS = 10e-7; //dopuszczalny margines bledu
  13.  
  14. int main()
  15. {
  16. double A, B, C;
  17. cin >> A >> B >> C;
  18. if (A < 0) //upewnienie sie, ze wspolczynnik A jest dodatni
  19. {
  20. A *= -1;
  21. B *= -1;
  22. C *= -1;
  23. }
  24.  
  25. int t = 0;
  26. cin >> t;
  27. while (t--)
  28. {
  29.  
  30. double x1, x2;
  31. double P; //przyblizenie z zadania
  32. cin>> x1 >> x2 >> P;
  33. double S = F(A, B, C, x2) - F(A, B, C, x1); //faktyczne pole
  34. double E = P - S; //blad (zawsze P >= S)
  35. E-=EPS;
  36.  
  37. //cout <<setprecision(7) << fixed << S <<' ';
  38.  
  39.  
  40. int K = (x2 - x1) * (x2 - x1) * (x2 - x1) * A / 6.0 / E;
  41.  
  42. K = sqrt(K);
  43.  
  44.  
  45. K++;
  46. int k = K;
  47. while (k > 0)
  48. {
  49. if (sum(A, B, C, k, x1, x2) - P < EPS && -1*EPS < sum(A, B, C, k, x1, x2) - P)
  50. {
  51. cout<< k <<endl;
  52. break;
  53.  
  54. }
  55. k--;
  56. }
  57.  
  58. //cout<< k <<endl;
  59.  
  60.  
  61.  
  62.  
  63.  
  64. }
  65. return 0;
  66. }
  67.  
  68.  
  69. double f(double A, double B, double C, double x) //funkcja f(x)
  70. {
  71. return A * x * x + B * x + C;
  72.  
  73. }
  74.  
  75. double sum(double A, double B, double C, int k, double x1, double x2) //zwraca przyblizenie z uzyciem k trapezow
  76. {
  77. double Dx = x2 - x1;
  78. double suma = 0;
  79. suma += f(A, B, C, x1) + f(A, B, C, x2);
  80. suma /= 2.0;
  81. for (int i = 1; i <= k -1; i++)
  82. {
  83. double temp = x1 + Dx * (1.0 * i) / (1.0 * k);
  84. suma += f(A, B, C, temp);
  85. }
  86. suma *= Dx / (1.0 *k );
  87. return abs(suma);
  88. }
  89.  
  90.  
  91.  
  92.  
  93. double F(double A, double B, double C, double x) // funkcja pierwotna od f
  94. {
  95. return A * x * x * x / 3.0 + B * x * x / 2.0 + C * x * 1.0;
  96.  
  97. }
  98.  
Success #stdin #stdout 0s 4552KB
stdin
1 1 2
5
0 5 85.000000
0 5 69.375000
0 5 66.481481
0 5 64.168750
0 5 64.168709
stdout
1
2
3
100
101