Submission #1027222

#TimeUsernameProblemLanguageResultExecution timeMemory
1027222idkmanSure Bet (CEOI17_sure)C++17
0 / 100
1 ms2396 KiB
// #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> #define ll long long #define For(i,a,b) for(ll i=(a);i<=(b);i++) #define Ford(i,a,b) for(ll i=(a);i>=(b);i--) #define pb push_back #define all(x) x.begin(), x.end() #define fi first #define se second #define endl "\n" using namespace std; int Dx[] = {0, 1, 0, -1, -1, -1, 1, 1}; int Dy[] = {-1, 0, 1, 0, 1, -1, 1, -1}; int dx[] = {0, 1, 0, -1}; int dy[] = {-1, 0, 1, 0}; const ll inf = 1000000000000000000; const int N = 100000; const int block_size = 300; const ll MOD = 1e9 + 7; /* 998244353 */ const int LG = 18; const int K = 20; const int M = 10000000; ll nph(ll k, ll x) { return ((x >> k) & 1LL); } #define ld double ll n; ld a[N+3],b[N+3], prea[N+3], preb[N+3]; bool cmp(ld a, ld b) { return a > b; } ld result(vector<ld> a, vector<ld> b) { ld sum1 = 0; for(auto x : a) sum1 += x; ld sum2 = 0; for(auto x : b) sum2 += x; return min(sum1, sum2) - 1.0 * (a.size() + b.size()); } void Solve() { cin>>n; ld ans = 0.0; For(i, 1, n) cin>>a[i]>>b[i]; sort(a+1, a+n+1, cmp); sort(b+1, b+n+1, cmp); For(i, 1, n) prea[i] = prea[i-1] + a[i]; For(i, 1, n) preb[i] = preb[i-1] + b[i]; //For(i, 1, n) cout << preb[i] << endl; // pick biggest first first ll l = 1, r = 1; vector<ld> used1, used2; while(l <= n && r <= n) { ll amount = a[l]; amount--; if(amount == 0) break; // 1 2 3 4 5 ld have = preb[r + amount - 1] - preb[r-1]; have -= 1.0 * (amount + 1); if(have > 0) { used1.pb(a[l]); For(i, r, r+amount-1) used2.pb(b[i]); r += amount; } l++; } //for(auto x : used2) cout << x << " "; ans = max(ans, result(used1, used2)); used1.clear(); used2.clear(); For(i, 1, n) swap(a[i], b[i]); l = 1; r = 1; while(l <= n && r <= n) { ll amount = a[l]; amount--; if(amount == 0) break; // 1 2 3 4 5 ld have = preb[r + amount - 1] - preb[r-1]; have -= 1.0 * (amount + 1); if(have > 0) { used1.pb(a[l]); For(i, r, r+amount-1) used2.pb(b[i]); r += amount; } l++; } //for(auto x : used2) cout << x << " "; ans = max(ans, result(used1, used2)); cout << fixed << setprecision(4) << ans; } int main() { // freopen("AVGSEQ.INP", "r", stdin); // freopen("AVGSEQ.OUT", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin >> t; while(t--) Solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...