思路:分别计算第 i 个 A
和 B
到 2i−1 号位置的距离。
我认为这个方法没啥问题/kel
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
const int inf = 2e9;
void solve();
signed main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
int _ = 1;
// std::cin >> _;
while (_--) solve();
return 0;
}
const int N = 1e6 + 5;
int n;
char s[N];
int ans = inf, cnt = 0;
std::vector<int> ap, bp;
void solve() {
std::cin >> n;
n <<= 1;
for (int i = 1; i <= n; i++) std::cin >> s[i];
for (int i = 1; i <= n; i++)
(s[i] == 'A') ? ap.emplace_back(i) : bp.emplace_back(i);
for (int i = 1; i <= (int)ap.size(); i++) cnt += abs(ap[i - 1] - ((i * 2) - 1));
ans = std::min(ans, cnt);
cnt = 0;
for (int i = 1; i <= (int)bp.size(); i++) cnt += abs(bp[i - 1] - ((i * 2) - 1));
ans = std::min(ans, cnt);
std::cout << ans << endl;
return void();
}