Submission #1188604

#TimeUsernameProblemLanguageResultExecution timeMemory
1188604qwushaBoarding Passes (BOI22_passes)C++20
60 / 100
248 ms888 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second typedef long long ll; typedef long double ld; mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); #define int long long int inf = 1e18; #define ld long double signed main() { string s; cin >> s; int n = s.size(); set<char> st; for (auto el : s) st.insert(el); if(st.size() == 1) { ld res = 0; for (int i = 0; i < n / 2; i++) { res += i; } for (int i = n - 1; i >= n / 2; i--) { res += (n - 1 - i); } res /= 2; cout << setprecision(15) << res << '\n'; return 0; } vector<int> a(n); int k = 10; vector<int> cnt(k); vector<vector<int>> pos(k); for(int i = 0; i < n; i++) { a[i] = s[i] - 'A'; cnt[a[i]]++; pos[a[i]].push_back(i); } vector<int> sum(n + 1); for (int i = 1; i < n + 1; i++) { sum[i] = sum[i - 1] + i - 1; } vector<int> dp((1 << k), inf); dp[0] = 0; vector<int> pref(n + 1), suf(n + 1); for (int ma = 1; ma < (1 << k); ma++) { vector<int> vec; for (int i = 0; i < k; i++) { if ((ma >> i) & 1) { vec.push_back(i); } } for (auto el : vec) { int par = ma - (1 << el); for (int i = 0; i < n; i++) { pref[i + 1] = pref[i]; if ((par >> (a[i])) & 1) { pref[i + 1] += 2; } } int suffi = 0, preffi = 0; for (int i = n - 1; i >= 0; i--) { suf[i] = suf[i + 1]; if ((par >> (a[i])) & 1) { suf[i] += 2; } } for (auto in : pos[el]) suffi += suf[in]; int mini = suffi + sum[cnt[el]]; for (int i = 0; i < cnt[el]; i++) { int indi = pos[el][i]; preffi += pref[indi + 1]; suffi -= suf[indi]; mini = min(mini, sum[i + 1] + sum[cnt[el] - (i + 1)] + preffi + suffi); } if (cnt[el] == 0) { dp[ma] = min(dp[ma], dp[par]); } else { dp[ma] = min(dp[ma], dp[par] + mini); } } } cout << setprecision(30) << (ld)dp[dp.size() - 1] / (ld)2 << '\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...