Submission #207846

#TimeUsernameProblemLanguageResultExecution timeMemory
207846SiberianSure Bet (CEOI17_sure)C++14
100 / 100
56 ms6776 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
#define all(x) x.begin(), x.end()

template <typename T1, typename T2> inline void chkmin(T1 &x, const T2 & y) {if (x > y) x = y;}
template <typename T1, typename T2> inline void chkmax(T1 &x, const T2 & y) {if (x < y) x = y;}

int Read() {
	string s;
	cin >> s;
	int ans = 0;
	int cnt = 4;
	bool flag = false;
	for (auto i : s) {
		if (i == '.') {
			flag = true;
			continue;
		}
		if (flag) cnt--;
		ans *= 10;
		ans += i - '0';
	}
	while (cnt--)
		ans *= 10;
	return ans;
}

int n;
vector<ll> a, b;

void read() {
	cin >> n;
	a.resize(n);
	b.resize(n);
	for (int i = 0; i < n; i++) {
		a[i] = Read();
		b[i] = Read();
	}
}

ll solve(vector<ll> a, vector<ll> b) {
	ll ans = 0;
	for (int i = 1; i < n; i++) {
		a[i] += a[i - 1];
		b[i] += b[i - 1];
	}
	for (int i = 0; i < n; i++) {
		ll pos = lower_bound(all(b), a[i]) - b.begin();
		if (pos == n) break;
		chkmax(ans, a[i] - (i + 1) * 10000 - (pos + 1) * 10000);
	}
	return ans;
}

ll ans;

void run() {
	sort(all(a));
	reverse(all(a));
	sort(all(b));
	reverse(all(b));
	ans = max(solve(a, b), solve(b, a));
}

string get(ll ans) {
	string fans = "";
	for (int i = 0; i < 4; i++) {
		fans += '0' + ans % 10;
		ans /= 10;
	}
	fans += ".";
	if (ans == 0) {
		fans += "0";
	}
	else {
		while (ans) {
			fans += '0' + ans % 10;
			ans /= 10;
		}
	}
	reverse(all(fans));
	return fans;
}

void write() {
	cout << get(ans) << endl;
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	read();
	run();
	write();
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...