제출 #855978

#제출 시각아이디문제언어결과실행 시간메모리
855978CyanmondSure Bet (CEOI17_sure)C++17
60 / 100
471 ms3460 KiB
#include <bits/stdc++.h>

using namespace std;

#define rep(i, l, r) for (int i = (l); i < (r); ++i)
#define per(i, l, r) for (int i = (r - 1); i >= l; --i)
#define ALL(x) (x).begin(), (x).end()

using i64 = long long;

i64 parse() {
    i64 ret = 0;
    string s;
    cin >> s;
    if (find(ALL(s), '.') == s.end()) s.push_back('.');
    while (s.end() - find(ALL(s), '.') <= 4) s += '0';
    for (const auto e : s) {
        if (std::isdigit(e)) {
            ret = 10 * ret + (e - '0');
        } else {
            continue;
        }
    }
    return ret;
}

void out(i64 v) {
    cout << v / 10000 << '.';
    i64 m = v % 10000;
    string s = to_string(m);
    while (s.size() < 4) s += '0';
    cout << s;
    cout << endl;
}

void main_() {
    int N;
    cin >> N;
    vector<i64> A(N), B(N);
    rep(i, 0, N) {
        A[i] = parse();
        B[i] = parse();
        cerr << A[i] << ' ' << B[i] << endl;
    }
    sort(ALL(A), greater());
    sort(ALL(B), greater());

    i64 ok = 0, ng = 1ll << 60;
    constexpr i64 C = 10000;
    while (ng - ok > 1) {
        const auto mid = (ok + ng) / 2;
        int i = 0, j = 0;
        i64 sumA = 0, sumB = 0;
        while (true) {
            bool isOk = true;
            while (i != N and sumA - (i + j) * C < mid) {
                sumA += A[i];
                ++i;
                isOk = false;
            }
            while (j != N and sumB - (i + j) * C < mid) {
                sumB += B[j];
                ++j;
                isOk = false;
            }
            if (isOk) break;
        }
        if (min(sumA, sumB) - (i + j) * C >= mid) {
            ok = mid;
        } else {
            ng = mid;
        }
    }
    out(ok);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    main_();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...