#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 << 50;
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_();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
456 KB |
Output is correct |
6 |
Correct |
0 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
456 KB |
Output is correct |
6 |
Correct |
0 ms |
344 KB |
Output is correct |
7 |
Correct |
1 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
344 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
348 KB |
Output is correct |
11 |
Correct |
1 ms |
348 KB |
Output is correct |
12 |
Correct |
5 ms |
348 KB |
Output is correct |
13 |
Correct |
6 ms |
612 KB |
Output is correct |
14 |
Correct |
5 ms |
348 KB |
Output is correct |
15 |
Correct |
5 ms |
348 KB |
Output is correct |
16 |
Correct |
5 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
456 KB |
Output is correct |
6 |
Correct |
0 ms |
344 KB |
Output is correct |
7 |
Correct |
1 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
344 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
348 KB |
Output is correct |
11 |
Correct |
1 ms |
348 KB |
Output is correct |
12 |
Correct |
5 ms |
348 KB |
Output is correct |
13 |
Correct |
6 ms |
612 KB |
Output is correct |
14 |
Correct |
5 ms |
348 KB |
Output is correct |
15 |
Correct |
5 ms |
348 KB |
Output is correct |
16 |
Correct |
5 ms |
348 KB |
Output is correct |
17 |
Correct |
457 ms |
4552 KB |
Output is correct |
18 |
Correct |
460 ms |
4400 KB |
Output is correct |
19 |
Incorrect |
474 ms |
4584 KB |
Output isn't correct |
20 |
Halted |
0 ms |
0 KB |
- |