CF1385D RT,求调
#include <iostream>
#include <string>
#include <map>
typedef long long ll;
using namespace std;
string s;
ll ans;
void erfen(ll b, ll e, char y) {
map<char, ll> mp1;
map<char, ll> mp2;
char mike = 'a';
for (ll i = b - 1; i <= (b + e) / 2 - 1; i++) {
mp1[s[i]]++;
if (s[i] > mike) mike = s[i];
}
for (ll i = (b + e) / 2; i <= e - 1; i++) {
mp2[s[i]]++;
if (s[i] > mike) mike = s[i];
}
if (b == e) {
if (!mp1[y]) ans++;
return;
}
ll cnt = 0;
for (char i = y; i <= mike; i++) {
if (mp1[i] > mp2[i] && i != y)
{
cnt=1;
break;
}
if (mp1[i] < mp2[i] && i != y) {
cnt = 0;
break;
}
if (mp1[i] > mp2[i] && i == y)
{
cnt = 0;
break;
}
if (mp1[i] < mp2[i] && i == y)
{
cnt=1;
break;
}
if (i == mike && i == y) {
cnt = 1;
break;
}
if (i == mike && i != y) {
cnt = 0;
break;
}
}
if (cnt == 0) {
ans += (e - b + 1) / 2 - mp1[y];
erfen((b + e) / 2 + 1, e, y + 1);
return;
}
if (cnt == 1) {
ans += (e - b + 1) / 2 - mp2[y];
erfen(b, (b + e) / 2, y + 1);
return;
}
}
int main() {
ll t;
cin >> t;
while (t--) {
ll n;
cin >> n;
cin >> s;
erfen(1, n, 'a');
cout << ans << endl;
ans = 0;
}
return 0;
}