제출 #653022

#제출 시각아이디문제언어결과실행 시간메모리
653022ayallaSure Bet (CEOI17_sure)C++14
100 / 100
94 ms4412 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

template <class T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define int long long int
#define endl '\n'
#define pb push_back
#define pi pair<int, int>
#define pii pair<int, pi>
#define fir first
#define sec second
#define MAXN 100005
#define mod 1000000007

signed main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  vector<double> a(n);
  vector<double> b(n);
  for (int i = 0; i < n; i++)
    cin >> a[i] >> b[i];
  sort(a.rbegin(), a.rend());
  sort(b.rbegin(), b.rend());
  vector<double> pref(n + 1, 0);
  for (int i = 0; i < n; i++)
  {
    pref[i + 1] = pref[i] + b[i];
  }
  double ans = 0.0, luc = 0, qt = 0.0;
  for (int i = 0; i < n; i++)
  {
    luc += a[i];
    qt += 1;
    auto f = [&](int x)
    {
      return min(pref[x] - (qt + x), luc - (qt + x));
    };
    int l = 1, r = n;
    while (l < r)
    {
      int mid = (l + r) >> 1;
      (f(mid) > f(mid + 1)) ? r = mid : l = mid + 1;
    }
    ans = max(ans, f(l));
  }
  cout << fixed << setprecision(4) << ans << endl;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...