#include <bits/stdc++.h>
using namespace std;
int check(int mask, int n){
//0 is a, 1 is b
vector<int>as;
vector<int>bs;
for(int i = 0;i<n;i++){
if((1<<i)&mask){
bs.push_back(i);
}
else{
as.push_back(i);
}
}
for(int i = 0;i<n/2;i++){
if(as[i]>bs[i]){
return 1e9;
}
}
//valid arrangement
int i = 0;
int cn = 0;
while(i<n/2){
//at ith a
cn++;
i=lower_bound(as.begin(),as.end(),bs[i])-as.begin();
}
return cn;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,k;
cin >> n >> k;
string s;
cin >> s;
vector<int>as;
n*=2;
for(int i = 0;i<n;i++){
if(s[i]=='A'){
as.push_back(i);
}
}
int ans = 1e9;
for(int mask = 0;mask<(1<<n);mask++){
if(__builtin_popcount(mask)!=n/2){
continue;
}
if(check(mask,n)<=k){
int curr = 0;
vector<int>temp;
for(int i = 0;i<n;i++){
if((1<<i)&mask){
}
else{
temp.push_back(i);
}
}
for(int i = 0;i<n/2;i++){
curr+=abs(as[i]-temp[i]);
}
ans=min(ans,curr);
}
}
cout << ans;
return 0;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |