제출 #1221487

#제출 시각아이디문제언어결과실행 시간메모리
1221487vako_pSure Bet (CEOI17_sure)C++20
100 / 100
21 ms1864 KiB
#include <bits/stdc++.h> 
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define sd second
#define debug(x) cerr << #x << "----> " << x << endl;
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("O3")

const int mxN = 1e6 + 5;
ll n,a[mxN],b[mxN];

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	ll ans = 0;
	cin >> n;
	string s;
	for(int i = 1; i <= n; i++){
		cin >> s;
		ll val = 1,idx = s.size() - 1;
		for(int j = 0; j < s.size(); j++){
			if(s[j] == '.'){
				idx = j;
				break;
			}
		}
		for(int j = 0; j < 5 - (s.size() - idx); j++) val *= 10;
		for(int j = s.size() - 1; j >= 0; j--){
			if(s[j] == '.') continue;
			a[i] += val * (s[j] - '0');
			val *= 10;
		}
		cin >> s;
		val = 1;idx = s.size() - 1;
		for(int j = 0; j < s.size(); j++){
			if(s[j] == '.'){
				idx = j;
				break;
			}
		}
		for(int j = 0; j < 5 - (ll)(s.size() - idx); j++) val *= 10;
		for(int j = s.size() - 1; j >= 0; j--){
			if(s[j] == '.') continue;
			b[i] += val * (s[j] - '0');
			val *= 10;
		}
	}
	sort(a + 1, a + n + 1);
	reverse(a + 1, a + n + 1);
	sort(b + 1, b + n + 1);
	reverse(b + 1, b + n + 1);
	ans = max(ans, min(a[1] - 20000, b[1] - 20000));
	ll l = 2,l1 = 2,sum = a[1] - 20000, sum1 = b[1] - 20000;
	for(int i = 3; i <= 2 * n; i++){
		if((sum < sum1 or l1 > n) and l <= n){
			sum += a[l++] - 10000;
			sum1 -= 10000;
		}
		else{
			sum1 += b[l1++] - 10000;
			sum -= 10000;
		}
		ans = max(ans, min(sum, sum1));
	}
	cout << ans / 10000 << ".";
	s = to_string(ans % 10000);
	while(s.size() < 4) s = "0" + s;
	cout << s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...