Submission #889706

#TimeUsernameProblemLanguageResultExecution timeMemory
889706vjudge1Chorus (JOI23_chorus)C++17
16 / 100
7027 ms456 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define ar array
#define pb push_back
#define ln '\n'
#define int long long

using i64 = long long;

template <class F, class _S>
bool chmin(F &u, const _S &v){
    bool flag = false;
    if ( u > v ){
        u = v; flag |= true;
    }
    return flag;
}

template <class F, class _S>
bool chmax(F &u, const _S &v){
    bool flag = false;
    if ( u < v ){
        u = v; flag |= true;
    }
    return flag;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k; cin >> n >> k;
    string s; cin >> s;
    int m = s.size();
    auto get = [&](auto &u){ return u == 'A' ? -1 : 1; };
    auto ok = [&](auto &s){
        queue <int> q;
        vector <int> nxt(m, m + 1);
        for ( int i = m - 1; i >= 0; i-- ){
            if ( s[i] == 'B' ) q.push(i);
            else{
                if ( q.empty() ){
                    return false;
                }
                nxt[i] = q.front();
                q.pop();
            }
        }
        int cnt = 1, lst = -1;
        vector <int> c(m);
        for ( int i = m - 1; i >= 0; i-- ){
            if ( s[i] != 'B' ) continue;
            if ( lst == -1 ){
                lst = i;
                c[lst] = i;
            } else{
                int mn = m + 1;
                for ( int k = lst - 1; k > i; k-- ){
                    chmin(mn, nxt[k]);
                }
                if ( mn <= c[lst] ){
                    c[i] = i;
                    ++cnt;
                } else c[i] = c[lst];
                lst = i;
            }
        }
        return cnt <= k;
    };
    vector <int> a;
    for ( int i = 0; i < m; i++ ){
        if ( s[i] == 'B' ) a.pb(i);
    }
    auto t = s;
    sort(all(t));
    int mn = n * n + 1;
    do{
        if ( !ok(t) ) continue;
        vector <int> b;
        for ( int i = 0; i < m; i++ ){
            if ( t[i] == 'B' ) b.pb(i);
        }
        int ans = 0;
        for ( int i = 0; i < n; i++ ){
            ans += abs(a[i] - b[i]);
        }
        auto flag = chmin(mn, ans);
    } while ( next_permutation(all(t)) );
    cout << mn;

    cout << '\n';
}

Compilation message (stderr)

chorus.cpp: In function 'int main()':
chorus.cpp:90:14: warning: unused variable 'flag' [-Wunused-variable]
   90 |         auto flag = chmin(mn, ans);
      |              ^~~~
chorus.cpp:38:10: warning: variable 'get' set but not used [-Wunused-but-set-variable]
   38 |     auto get = [&](auto &u){ return u == 'A' ? -1 : 1; };
      |          ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...