# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
735793 | 2023-05-04T16:40:00 Z | Victor | Boarding Passes (BOI22_passes) | C++17 | 2000 ms | 20812 KB |
// #pragma GCC target ("avx,avx2,fma") // #pragma GCC optimize ("Ofast,inline") // O1 - O2 - O3 - Os - Ofast // #pragma GCC optimize ("unroll-loops") #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (ll i = (a); i < (b); ++i) #define per(i, a, b) for (ll i = (b) - 1; i >= (a); --i) #define trav(a, x) for (auto &a : x) #define all(x) x.begin(), x.end() #define sz(x) (ll)x.size() #define pb push_back #define mp make_pair #define debug(x) cout<<#x<<" = "<<x<<endl #define umap unordered_map #define uset unordered_set typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<vi> vvi; typedef long long ll; typedef pair<ll,ll> pll; typedef pair<ll,pll> ppll; typedef vector<ll> vll; typedef vector<pll> vpll; const ll INF = 1'000'000'007; // 2^g state DP, what groups have boarded // g transitions, next group to board // to find optimal boarding side for next group we do not need to to O(N) thing // instead we go through each group and find how many are to the left when doing binary search // we precompute tables for each group // something like O(2^g * g² * log n) const ll g=15; ll n; string s; double memo[1<<g]; vll groups_sum[g]; vll groups_pos[g]; vll groups_cross[g][g]; double dp(ll mask) { if(mask==(1<<g)-1) return 0; double &ans=memo[mask]; if(ans!=-1) return ans; ans=1e10; rep(i,0,g) if(!(mask&(1<<i))) { ll group_size=sz(groups_pos[i]); ll lo=0,hi=group_size; while(lo!=hi) { ll mid=(lo+hi)/2; //cout<<"i = "<<i<<" mid = "<<mid<<endl; ll pos=groups_pos[i][mid]; ll peopleL=0,peopleR=0; rep(j,0,g) if(mask&(1<<j)) { ll val=groups_sum[j][pos]; peopleL+=val; peopleR+=group_size-val; } if(double(peopleL)+double(mid)/2.0<double(peopleR)+double(group_size-mid-1)/2.0) lo=mid+1; else hi=mid; } rep(k,0,group_size+1) { double add=0; rep(j,0,g) if(mask&(1<<j)) add+=double(groups_cross[i][j][k]); ll peopleL=k,peopleR=(group_size)-peopleL; add+=double(peopleL*(peopleL-1))/4.0+double(peopleR*(peopleR-1))/4.0; //if(add==100800) cout<<"peopleL = "<<peopleL<<" peopleR = "<<peopleR<<endl; ans=min(ans,dp(mask|(1<<i))+add); } } //cout<<"mask = "<<mask<<" ans = "<<ans<<endl; return ans; } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); rep(i,0,1<<g) memo[i]=-1; cin>>s; n=sz(s); trav(chr,s) chr-='A'; rep(i,0,g) groups_sum[i].assign(n+1,0); rep(i,0,n) { ++groups_sum[(ll)s[i]][i]; groups_pos[(ll)s[i]].pb(i); } rep(i,0,g) rep(j,1,n) groups_sum[i][j]+=groups_sum[i][j-1]; rep(i,0,g) rep(j,0,g) { ll val=0; groups_cross[i][j].pb(0); trav(pos,groups_pos[i]) { val+=groups_sum[j][pos]; groups_cross[i][j].pb(val); } val=0; per(k,0,sz(groups_pos[i])) { ll pos=groups_pos[i][k]; val+=sz(groups_pos[j])-groups_sum[j][pos]; groups_cross[i][j][k]+=val; } } cout<<setprecision(20)<<dp(0)<<endl; return 0; }
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 260 ms | 844 KB | found '100800.5000000000', expected '100800.5000000000', error '0.0000000000' |
2 | Correct | 11 ms | 596 KB | found '0.0000000000', expected '0.0000000000', error '-0.0000000000' |
3 | Correct | 13 ms | 468 KB | found '0.0000000000', expected '0.0000000000', error '-0.0000000000' |
4 | Correct | 13 ms | 588 KB | found '1.0000000000', expected '1.0000000000', error '0.0000000000' |
5 | Correct | 326 ms | 820 KB | found '124002.0000000000', expected '124002.0000000000', error '0.0000000000' |
6 | Execution timed out | 2063 ms | 20812 KB | Time limit exceeded |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 14 ms | 592 KB | found '1.0000000000', expected '1.0000000000', error '0.0000000000' |
2 | Correct | 38 ms | 600 KB | found '1225.0000000000', expected '1225.0000000000', error '0.0000000000' |
3 | Correct | 43 ms | 608 KB | found '1023.0000000000', expected '1023.0000000000', error '0.0000000000' |
4 | Correct | 44 ms | 596 KB | found '294.0000000000', expected '294.0000000000', error '0.0000000000' |
5 | Correct | 42 ms | 596 KB | found '1087.0000000000', expected '1087.0000000000', error '0.0000000000' |
6 | Correct | 16 ms | 596 KB | found '1.5000000000', expected '1.5000000000', error '0.0000000000' |
7 | Correct | 41 ms | 604 KB | found '703.0000000000', expected '703.0000000000', error '0.0000000000' |
8 | Correct | 20 ms | 604 KB | found '55.5000000000', expected '55.5000000000', error '0.0000000000' |
9 | Correct | 21 ms | 600 KB | found '56.0000000000', expected '56.0000000000', error '0.0000000000' |
10 | Correct | 21 ms | 604 KB | found '45.0000000000', expected '45.0000000000', error '0.0000000000' |
11 | Correct | 21 ms | 596 KB | found '66.5000000000', expected '66.5000000000', error '0.0000000000' |
12 | Correct | 25 ms | 604 KB | found '67.0000000000', expected '67.0000000000', error '0.0000000000' |
13 | Correct | 21 ms | 596 KB | found '66.0000000000', expected '66.0000000000', error '0.0000000000' |
14 | Correct | 22 ms | 584 KB | found '47.0000000000', expected '47.0000000000', error '0.0000000000' |
15 | Correct | 21 ms | 596 KB | found '50.0000000000', expected '50.0000000000', error '0.0000000000' |
16 | Correct | 21 ms | 596 KB | found '49.0000000000', expected '49.0000000000', error '0.0000000000' |
17 | Correct | 21 ms | 604 KB | found '57.0000000000', expected '57.0000000000', error '0.0000000000' |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 14 ms | 592 KB | found '1.0000000000', expected '1.0000000000', error '0.0000000000' |
2 | Correct | 38 ms | 600 KB | found '1225.0000000000', expected '1225.0000000000', error '0.0000000000' |
3 | Correct | 43 ms | 608 KB | found '1023.0000000000', expected '1023.0000000000', error '0.0000000000' |
4 | Correct | 44 ms | 596 KB | found '294.0000000000', expected '294.0000000000', error '0.0000000000' |
5 | Correct | 42 ms | 596 KB | found '1087.0000000000', expected '1087.0000000000', error '0.0000000000' |
6 | Correct | 16 ms | 596 KB | found '1.5000000000', expected '1.5000000000', error '0.0000000000' |
7 | Correct | 41 ms | 604 KB | found '703.0000000000', expected '703.0000000000', error '0.0000000000' |
8 | Correct | 20 ms | 604 KB | found '55.5000000000', expected '55.5000000000', error '0.0000000000' |
9 | Correct | 21 ms | 600 KB | found '56.0000000000', expected '56.0000000000', error '0.0000000000' |
10 | Correct | 21 ms | 604 KB | found '45.0000000000', expected '45.0000000000', error '0.0000000000' |
11 | Correct | 21 ms | 596 KB | found '66.5000000000', expected '66.5000000000', error '0.0000000000' |
12 | Correct | 25 ms | 604 KB | found '67.0000000000', expected '67.0000000000', error '0.0000000000' |
13 | Correct | 21 ms | 596 KB | found '66.0000000000', expected '66.0000000000', error '0.0000000000' |
14 | Correct | 22 ms | 584 KB | found '47.0000000000', expected '47.0000000000', error '0.0000000000' |
15 | Correct | 21 ms | 596 KB | found '50.0000000000', expected '50.0000000000', error '0.0000000000' |
16 | Correct | 21 ms | 596 KB | found '49.0000000000', expected '49.0000000000', error '0.0000000000' |
17 | Correct | 21 ms | 604 KB | found '57.0000000000', expected '57.0000000000', error '0.0000000000' |
18 | Correct | 17 ms | 592 KB | found '1.0000000000', expected '1.0000000000', error '0.0000000000' |
19 | Correct | 39 ms | 596 KB | found '1225.0000000000', expected '1225.0000000000', error '0.0000000000' |
20 | Correct | 42 ms | 608 KB | found '1023.0000000000', expected '1023.0000000000', error '0.0000000000' |
21 | Correct | 52 ms | 596 KB | found '294.0000000000', expected '294.0000000000', error '0.0000000000' |
22 | Correct | 40 ms | 596 KB | found '1087.0000000000', expected '1087.0000000000', error '0.0000000000' |
23 | Correct | 16 ms | 596 KB | found '1.5000000000', expected '1.5000000000', error '0.0000000000' |
24 | Correct | 37 ms | 596 KB | found '703.0000000000', expected '703.0000000000', error '0.0000000000' |
25 | Correct | 21 ms | 608 KB | found '55.5000000000', expected '55.5000000000', error '0.0000000000' |
26 | Correct | 21 ms | 604 KB | found '56.0000000000', expected '56.0000000000', error '0.0000000000' |
27 | Correct | 22 ms | 596 KB | found '45.0000000000', expected '45.0000000000', error '0.0000000000' |
28 | Correct | 24 ms | 604 KB | found '66.5000000000', expected '66.5000000000', error '0.0000000000' |
29 | Correct | 21 ms | 596 KB | found '67.0000000000', expected '67.0000000000', error '0.0000000000' |
30 | Correct | 21 ms | 588 KB | found '66.0000000000', expected '66.0000000000', error '0.0000000000' |
31 | Correct | 20 ms | 596 KB | found '47.0000000000', expected '47.0000000000', error '0.0000000000' |
32 | Correct | 21 ms | 600 KB | found '50.0000000000', expected '50.0000000000', error '0.0000000000' |
33 | Correct | 20 ms | 468 KB | found '49.0000000000', expected '49.0000000000', error '0.0000000000' |
34 | Correct | 20 ms | 596 KB | found '57.0000000000', expected '57.0000000000', error '0.0000000000' |
35 | Execution timed out | 2074 ms | 3156 KB | Time limit exceeded |
36 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 260 ms | 844 KB | found '100800.5000000000', expected '100800.5000000000', error '0.0000000000' |
2 | Correct | 11 ms | 596 KB | found '0.0000000000', expected '0.0000000000', error '-0.0000000000' |
3 | Correct | 13 ms | 468 KB | found '0.0000000000', expected '0.0000000000', error '-0.0000000000' |
4 | Correct | 13 ms | 588 KB | found '1.0000000000', expected '1.0000000000', error '0.0000000000' |
5 | Correct | 326 ms | 820 KB | found '124002.0000000000', expected '124002.0000000000', error '0.0000000000' |
6 | Execution timed out | 2063 ms | 20812 KB | Time limit exceeded |
7 | Halted | 0 ms | 0 KB | - |