Submission #865426

#TimeUsernameProblemLanguageResultExecution timeMemory
865426vjudge1Sure Bet (CEOI17_sure)C++17
100 / 100
70 ms11936 KiB
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <numeric>
#include <sstream>
#include <cassert>
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <fstream>
#include <unordered_map>
using namespace std;

typedef long long ll;
typedef long double ld;

#define all(x) x.begin(),x.end()
#define pb push_back
#define ent "\n"

const int maxn = (int)3e5 + 13;
const ll inf = (long long)1e18 + 20;
const int mod = (int)1e9 + 7;

int n;
ld a[maxn],b[maxn];
ld pref[maxn];
ld suf[maxn];

int get(int x,int y){
	int ans = x / pow(4,y);
	ans %= 4;
	return ans;
}

void solve(){
	cin >> n;
	for(int i = 1 ; i <= n ; i ++){
		cin >> a[i] >> b[i];
	}
	sort(a + 1,a + n + 1);
	sort(b + 1,b + n + 1);
	for(int i = 1 ; i <= n ; i ++){
		pref[i] = pref[i - 1] + b[i];
	}
	ld mx =0 ,sum = 0,sum1 = 0;
	int ind = n;
	for(int i = n ; i >= 1 ; i --){
		sum += a[i];
		sum1 = 0;
		for(int j = ind ; j >= 1 ; j --){
			sum1 = pref[n] - pref[j - 1];
			int kol = (n - i + 1) + (n - j + 1);
			mx = max(mx,min(sum1,sum) - kol);
			if(sum1 > sum){
				ind = j;
				break;
			}
		}
	}
	printf("%.4lf",(double)mx);
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t = 1;
	//cin >> t;
	while(t --){
		solve();
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...