Submission #855978

#TimeUsernameProblemLanguageResultExecution timeMemory
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...