#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n, ans=0;
cin >> n;
string s;
cin >> s;
//cout << s << " " << s[0]-'a' << endl;
vector<int> a(26,0), c(26,0);
for(int i=0; i<n; i++){
a[s[i]-'a']++;
a[s[n+i]-'a']++;
c[s[i]-'a']++;
}
string ms1="", ms2="", fs1="", fs2="";
int p=0;
for(int i=n-1; i>=0; i--){
if(c[s[i]-'a']>a[s[i]-'a']/2){
c[s[i]-'a']--;
ans+=n-i-1-p;
p++;
ms1+=s[i];
}
else{
fs1+=s[i];
}
}
p=0;
for(int i=n; i<n*2; i++){
if(c[s[i]-'a']<a[s[i]-'a']/2){
c[s[i]-'a']++;
ans+=i-n-p;
p++;
ms2+=s[i];
}
else{
fs2+=s[i];
}
}
ans+=p*p;
//cout << fs1 << " " << fs2 << " " << ms1 << " " << ms2 << endl;
stack<char> t;
for(int i=0; i<(long long)fs1.length(); i++){
t.push(fs1[i]);
}
for(int i=0; i<(long long)fs1.length(); i++){
fs1[i]=t.top();
t.pop();
}
for(int i=0; i<(long long)ms1.length(); i++){
t.push(ms1[i]);
}
for(int i=0; i<(long long)ms1.length(); i++){
ms1[i]=t.top();
t.pop();
}
fs1=fs1+ms2;
fs2=ms1+fs2;
unordered_multiset<char> us;
for(int i=n-1; i>=0; i--){
us.insert(fs2[i]);
}
for(int i=0; i<n; i++){
for(char j : us){
if(j==fs1[i]){
break;
}
ans++;
}
us.erase(us.find(fs1[i]));
}
cout << ans << endl;
}
# | 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... |