求找错
查看原帖
求找错
735507
imeye楼主2022/11/5 13:09

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;
}
2022/11/5 13:09
加载中...