Submission #1163468

#TimeUsernameProblemLanguageResultExecution timeMemory
1163468yhkhooEkoeko (COCI21_ekoeko)C++17
20 / 110
1093 ms2112 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
	cin.tie(0); ios_base::sync_with_stdio(0);
	int n;
	cin >> n;
	char s[2*n];
	cin >> s;
	int cnt[26];
	memset(cnt, 0, sizeof(cnt));
	for(int i=0; i<2*n; i++){
		cnt[s[i] - 'a']++;
	}
	int cna[26];
	for(int i=0; i<26; i++){
		cna[i] = cnt[i] / 2;
		//cerr << cna[i] << ' ';
	}
	//cerr << '\n';
	char s1[n], s2[n];
	auto s1p = s1, s2p = s2;
	int ans = 0;
	for(int i=0; i<2*n; i++){
		if(cna[s[i] - 'a']){
			ans += i - (s1p - s1);
			*s1p = s[i];
			s1p++;
			cna[s[i] - 'a']--;
		}
		else{
			*s2p = s[i];
			s2p++;
		}
	}
	// cerr << s1 << '\n' << s2;
	// cerr << ans << '\n';
	vector<int> locs[26];
	for(int i=0; i<n; i++){
		locs[s2[i] - 'a'].push_back(i);
	}
	/*for(int i=0; i<26; i++){
		cerr << i << ' ';
		for(auto j: locs[i]){
			cerr << j << ' ';
		}
		cerr << '\n';
	}*/
	int lp[26];
	memset(lp, 0, sizeof(lp));
	int ts[n];
	for(int i=0; i<n; i++){
		auto t = s1[i] - 'a';
		ts[i] = locs[t][lp[t]];
		lp[t]++;
		// cerr << ts[i] << ' ';
	}
	int loc[n]; // fw
	for(int i=0; i<n; i++){
		loc[i] = i;
	}
	for(int i=0; i<n; i++){
		ans += loc[ts[i]] - i;
		for(int j=0; j<ts[i]; j++){
			loc[j]++;
		}
	}
	cout << ans;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...