26072 c++ - 곰곰이와 시소

2024. 10. 23. 23:50🐣/BOJ

이분탐색으로 풀었습니다. 

중간에 입실론 오차범위 때문인지 오답이 되고 res의 범위를 탐색하는 과정에서 res<0, res>0으로 걸어서 시간초과에 빠지게 된 경우도 생겨서 double형의 범위나 이분탐색의 무한루프에 대해서 다시 한번 생각하는 문제가 되었습니다.

#include <iomanip>
#include <iostream>
#include <vector>

#define fastio ios::sync_with_stdio(0), cin.tie(0)
using namespace std;

int n;
double l;

int main() {
  fastio;
  cin >> n >> l;
  vector<int> w(n);
  vector<int> x(n);
  for (int i = 0; i < n; i++) cin >> x[i];
  for (int i = 0; i < n; i++) cin >> w[i];

  double s = 0.0, e = l, mid = 0.0;
  const double epsilon = 1e-7;

  while (e - s > epsilon) {
    mid = (s + e) / 2;
    double res = 0.0;

    for (int i = 0; i < n; i++) {
      res += (w[i] * (x[i] - mid));
    }

    if (res < 0)
      e = mid;
    else
      s = mid;
  }

  cout << fixed << setprecision(10) << (s + e) / 2;

  return 0;
}

'🐣 > BOJ' 카테고리의 다른 글

1005 c++ - ACM Craft  (0) 2024.10.30
5619 c++ - 세 번째  (0) 2024.10.24
11052 c++ - 카드 구매하기  (0) 2024.10.23
17069 c++ - 파이프 옮기기 2  (0) 2024.10.22
1644 c++ - 소수의 연속합  (0) 2024.10.21