解いた問題

7/13/2012

SRM440 Div2 Easy

250

2分探索



double f(vector<int> h, double g)
{
  double sum = 0;
  for (int i = 0; i < h.size(); ++i) {
    sum += sqrt(2.0 * h[i] / g);
  }
  return sum;
}

class IncredibleMachineEasy {
public:
  double gravitationalAcceleration(vector <int> H, int T)
  {
    double small = 1e-10;
    double large = 1e256;

    for (int loop = 10000; loop--; ) {
      double mid = (small + large) / 2.0;
      double t = f(H, mid);
      if (t >= T) small = mid;
      else large = mid;
    }

    return small;
  }
};