#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |