v 0. Pasted by slipstak2 as cpp at 2011-01-06 17:24:04 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 12.
  2. // 12B. Гирлянда [garland]
  3. // ibelyaev: 02Jan2011
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <vector>
  8.  
  9. using namespace std;
  10.  
  11. int n;
  12. const double eps = 1e-9;
  13. vector<double> h;
  14. void input()
  15. {
  16.     cin>>n;
  17.     h.resize(n);
  18.     cin>>h[0];
  19. }
  20. double _fabs(double a)
  21. {
  22.     if (a<0)
  23.         return -a;
  24.     return a;
  25. }
  26. double Equal(double a, double b)
  27. {
  28.     return _fabs(a-b) <= eps;
  29. }
  30. double Less(double a, double b)
  31. {
  32.     return a < b && !Equal(a,b);
  33. }
  34. double More(double a, double b)
  35. {
  36.     return a > b && !Equal(a,b);
  37. }
  38. void solve()
  39. {
  40.     double res = 1e9;
  41.     double l = 0, r = h[0];
  42.     while (Less(l,r))
  43.     {
  44.         h[1] = (l + r) / 2;
  45.         h.back() = 0;
  46.         bool isUp = false;
  47.         for (int i=2;i<n;i++)
  48.         {
  49.             h[i] = 2*h[i-1] - h[i-2] + 2;
  50.             if (!More(h[i],0))
  51.             {
  52.                 isUp = true;
  53.                 break;
  54.             }
  55.         }
  56.         if (More(h.back(),0.0))
  57.             res = min(res,h.back());
  58.         if (isUp)
  59.             l = h[1];
  60.         else
  61.             r = h[1];
  62.     }
  63.     printf("%0.2f",res);
  64. }
  65. int main()
  66. {
  67.     freopen("input.txt","r",stdin);
  68.     freopen("output.txt","w",stdout);
  69.  
  70.     input();
  71.     solve();
  72.     return 0;
  73. }


Editing is locked.