제출 #1147429

#제출 시각아이디문제언어결과실행 시간메모리
1147429Hamed_GhaffariChorus (JOI23_chorus)C++20
16 / 100
26 ms328 KiB
#include<bits/stdc++.h>
using namespace std;\

#define SZ(x) int(x.size())
#define all(x) x.begin(), x.end()
#define pb push_back

int get(string s) {
  int bal = 0;
  for(int i=0; i<SZ(s); i++) {
    bal += s[i]=='A' ? 1 : -1;
    if(bal<0) return 1e9;
  }
  vector<int> A, B;
  for(int i=SZ(s)-1; i>=0; i--)
    (s[i]=='A'?A:B).pb(i);
  int ans=0;
  while(!A.empty()) {
    ans++;
    int ct=0;
    while(!A.empty() && A.back()<B.back()) {
      ct++;
      A.pop_back();
    }
    while(ct--) B.pop_back();
  }
  return ans;
}

int dis(string s, string t) {
  vector<int> vs, vt;
  for(int i=0; i<SZ(s); i++) {
    if(s[i]=='A') vs.pb(i);
    if(t[i]=='A') vt.pb(i);
  }
  int ans = 0;
  for(int i=0; i<SZ(vs); i++)
    ans += abs(vs[i]-vt[i]);
  return ans;
}

int32_t main() {
  cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
  int n, k;
  cin >> n >> k;
  string s;
  cin >> s;
  assert(n<=10);
  int ans = 1e9;
  string t=s;
  sort(all(t));
  do {
    if(get(t)<=k)  ans = min(ans, dis(s, t));
  } while(next_permutation(all(t)));
  cout << ans << '\n';
  return 0;
}
#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...