Submission #1288529

#TimeUsernameProblemLanguageResultExecution timeMemory
1288529Math4Life2020Let's Win the Election (JOI22_ho_t3)C++20
100 / 100
170 ms476 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll,ll>; using ld = double; using pld = pair<ld,ld>; const ll INF = 1e18; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout << setprecision(20); ll N,K; cin >> N >> K; vector<pii> vba; for (ll i=0;i<N;i++) { ll a,b; cin >> a >> b; if (b==-1) { b=INF; } vba.push_back({b,a}); } sort(vba.begin(),vba.end()); ll A[N]; ll B[N]; for (ll i=0;i<N;i++) { B[i]=vba[i].first; A[i]=vba[i].second; } ll psf[N+1]; //prefix sum for finals: first block of length L (=idx) //-> take bottom K-L values of remaining N-L multiset<ll> rnum; psf[N]=0; for (ll i=K;i<N;i++) { rnum.insert(A[i]); psf[i]=0; } for (ll i=(K-1);i>=0;i--) { rnum.insert(A[i]); ll v = *(rnum.begin()); rnum.erase(rnum.begin()); psf[i]=psf[i+1]+v; } ld ans = psf[0]; for (ll bf=0;bf<=K;bf++) { vector<ld> dp0(N+1,INF); //bcurr -> minvalue dp0[0]=0; for (ll i=0;i<K;i++) { vector<ld> dp1(N+1,INF); for (ll bc=0;bc<bf;bc++) { //if bc=bf already you could just use the global feature (on prev turn) if (dp0[bc]<INF) { //take A dp1[bc]=min(dp1[bc],dp0[bc]+((ld)A[i])/((ld)(bf+1))); //take B if (B[i]!=INF) { dp1[bc+1]=min(dp1[bc+1],dp0[bc]+((ld)(B[i]))/((ld)(bc+1))); } } } dp0=dp1; //now consider bc=bf term: ready to fly out ans = min(ans,dp0[bf]+((ld)psf[i+1])/((ld)(bf+1))); } } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...