Submission #599574

#TimeUsernameProblemLanguageResultExecution timeMemory
599574fvogel499Boarding Passes (BOI22_passes)C++17
30 / 100
2085 ms3084 KiB
/* * File created on 07/19/2022 at 15:24:35. * Link to problem: * Description: * Time complexity: O() * Space complexity: O() * Status: --- * Copyright: Ⓒ 2022 Francois Vogel */ #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define pii pair<int, int> #define f first #define s second #define vi vector<int> #define all(x) x.begin(), x.end() #define size(x) (int)((x).size()) #define pb push_back #define ins insert #define cls clear #define int ll #define ll long long #define ld long double typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; signed main() { cin.tie(0); ios_base::sync_with_stdio(0); string b; cin >> b; const int n = size(b); int gK = 0; for (char i : b) if (i-'A'+1 > gK) gK = i-'A'+1; vi toPermute; for (int i = 0; i < gK; i++) toPermute.pb(i); ld offMin = n*n; do { for (int i = 0; i < n; i++) { b[i] = char('A'+toPermute[b[i]-'A']); } ld res = 0; for (int i = 0; i < gK; i++) { vi pos; for (int j = 0; j < n; j++) if (b[j]-'A' == i) { pos.pb(j); } if (pos.empty()) continue; int pref [n]; for (int j = 0; j < n; j++) pref[j] = (b[j]-'A' < i); for (int j = 1; j < n; j++) pref[j] += pref[j-1]; int suf [n]; for (int j = 0; j < n; j++) suf[j] = (b[j]-'A' < i); for (int j = n-2; j >= 0; j--) suf[j] += suf[j+1]; for (int j = 0; j < size(pos); j++) { ld dl = 0; if (pos[j]) dl = pref[pos[j]-1]; ld dr = 0; if (pos[j]+1 < n) dr = suf[pos[j]+1]; ld cl = j; ld cr = size(pos)-1-j; res += min(dl+cl/2, dr+cr/2); } } offMin = min(offMin, res); vi invToPermute(gK); for (int i = 0; i < gK; i++) invToPermute[toPermute[i]] = i; for (int i = 0; i < n; i++) { b[i] = char('A'+invToPermute[b[i]-'A']); } } while (next_permutation(all(toPermute))); cout.precision(20); cout << offMin; cout.flush(); int d = 0; d++; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...