#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main()
{
string word;
long count = 0;
priority_queue<int, vector<int>, greater<int>> aIndexes, bIndexes;
getline(cin, word);
int n = word.length();
int a_count = 0;
int b_count = 0;
for (int i=0; i<n; i++) {
if (word[i] == 'a') {
aIndexes.push(i);
a_count++;
} else {
bIndexes.push(i);
b_count++;
}
}
if (a_count % 2 == 1 && b_count % 2 == 1) {
cout << -1;
return 0;
}
int id;
for (int i = 0; i < n / 2; i++) {
if (a_count == 0 || b_count == 0)
{
break;
}
if (word[i] == word[n - i - 1] == 'a')
{
a_count -= 2;
continue;
}
if (word[i] == word[n - i - 1] == 'b')
{
b_count -= 2;
continue;
}
if (a_count == 1)
{
count += (n / 2) - aIndexes.top();
break;
}
if (b_count == 1)
{
count += (n / 2) - bIndexes.top();
break;
}
if (word[i] == 'a') {
id = bIndexes.top();
bIndexes.pop();
aIndexes.push(id);
count += id - i;
word[id] = 'a';
b_count -= 2;
} else {
id = aIndexes.top();
aIndexes.pop();
bIndexes.push(id);
count += id - i;
word[id] = 'b';
a_count -= 2;
}
}
cout << count;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <iostream> #include <string> #include <queue> using namespace std; int main() { string word; long count = 0; priority_queue<int, vector<int>, greater<int>> aIndexes, bIndexes; getline(cin, word); int n = word.length(); int a_count = 0; int b_count = 0; for (int i=0; i<n; i++) { if (word[i] == 'a') { aIndexes.push(i); a_count++; } else { bIndexes.push(i); b_count++; } } if (a_count % 2 == 1 && b_count % 2 == 1) { cout << -1; return 0; } int id; for (int i = 0; i < n / 2; i++) { if (a_count == 0 || b_count == 0) { break; } if (word[i] == word[n - i - 1] == 'a') { a_count -= 2; continue; } if (word[i] == word[n - i - 1] == 'b') { b_count -= 2; continue; } if (a_count == 1) { count += (n / 2) - aIndexes.top(); break; } if (b_count == 1) { count += (n / 2) - bIndexes.top(); break; } if (word[i] == 'a') { id = bIndexes.top(); bIndexes.pop(); aIndexes.push(id); count += id - i; word[id] = 'a'; b_count -= 2; } else { id = aIndexes.top(); aIndexes.pop(); bIndexes.push(id); count += id - i; word[id] = 'b'; a_count -= 2; } } cout << count; return 0; } |
English