Submission #1098954

#TimeUsernameProblemLanguageResultExecution timeMemory
1098954not_amirBoarding Passes (BOI22_passes)C++14
25 / 100
2080 ms1520 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long double ld;
typedef long long ll;

constexpr int N = 15;

int h[N];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    string S;
    cin >> S;
    int n = S.size();
    for(char c : S) {
        h[c - 'A'] = 1;
    }
    for(int i = 0, it = 0; i < N; i++)
        if(h[i])
            h[i] = it++;
    ll res = n * n;
    vector<ll> dp(1 << N, ll(n) * ll(n));
    dp[0] = 0;
    for(int i = 1; i < 1 << N; i++) {
        for(int j = 0; j < N; j++) {
            if(i & (1 << j)) {
                ll ans = dp[i ^ (1 << j)];
                vector<ll> rem(n);
                for(int k = 0, it = 0, sum = 0; k < n; k++) {
                    if(h[S[k] - 'A'] == j) {
                        rem[k] = it++ + 2 * sum;
                        ans += rem[k];
                    }
                    else if(i & (1 << h[S[k] - 'A']))
                        sum++;
                }
                ll mini = ans;
                for(int k = n - 1, it = 0, sum = 0; k>= 0; k--) {
                    if(h[S[k] - 'A'] == j) {
                        ans -= rem[k];
                        ans += it++ + 2 * sum;
                    }
                    else if(i & (1 << h[S[k] - 'A']))
                        sum++;
                    mini = min(mini, ans);
                }
                dp[i] = min(dp[i], mini);
            }
        }
    }
    cout << fixed << setprecision(6) << ld(dp[(1 << N) - 1]) / 2.0;
}

Compilation message (stderr)

passes.cpp: In function 'int main()':
passes.cpp:23:8: warning: unused variable 'res' [-Wunused-variable]
   23 |     ll res = n * 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...