#include <cstdio>
#include <cstdint>
#include <vector>
int main () {
char c;
std::vector<bool> word;
int as = 0;
int bs = 0;
while (true) {
scanf("%c", &c);
if (c == 'a') {
word.push_back(false);
as++;
}
else if (c == 'b') {
word.push_back(true);
bs++;
}
else {
break;
}
}
if (((as % 2) == 1) && ((bs % 2) == 1)) {
printf("-1\n");
return 0;
}
if ((as == 0) || (bs == 0)) {
printf("0\n");
return 0;
}
int64_t moves = 0;
int n = word.size();
int next_a = -1;
int next_b = -1;
for (int i = 0; i < n; ++i) {
if ((!word[i]) && (next_a == -1)) {
next_a = i;
}
if ((word[i]) && (next_b == -1)) {
next_b = i;
}
if ((next_a >= 0) && (next_b >= 0)) {
break;
}
}
for (int i = 0; i < n / 2; ++i) {
if ((next_a < i) || (word[next_a])) {
for (int j = next_a + 1; j < n; ++j) {
if (!word[j]) {
next_a = j;
break;
}
}
}
if ((next_b < i) || (!word[next_b])) {
for (int j = next_b + 1; j < n; ++j) {
if (word[j]) {
next_b = j;
break;
}
}
}
if (word[i] == word[n - 1 - i]) {
continue;
}
if (word[i]) {
if (next_a == n - 1 - i) {
moves += (next_a - i) / 2;
break;
}
moves += next_a - i;
word[i] = false;
word[next_a] = true;
}
else {
if (next_b == n - 1 - i) {
moves += (next_b - i) / 2;
break;
}
moves += next_b - i;
word[i] = true;
word[next_b] = false;
}
}
printf("%lld\n", moves);
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 79 80 81 82 83 84 85 86 87 88 | #include <cstdio> #include <cstdint> #include <vector> int main () { char c; std::vector<bool> word; int as = 0; int bs = 0; while (true) { scanf("%c", &c); if (c == 'a') { word.push_back(false); as++; } else if (c == 'b') { word.push_back(true); bs++; } else { break; } } if (((as % 2) == 1) && ((bs % 2) == 1)) { printf("-1\n"); return 0; } if ((as == 0) || (bs == 0)) { printf("0\n"); return 0; } int64_t moves = 0; int n = word.size(); int next_a = -1; int next_b = -1; for (int i = 0; i < n; ++i) { if ((!word[i]) && (next_a == -1)) { next_a = i; } if ((word[i]) && (next_b == -1)) { next_b = i; } if ((next_a >= 0) && (next_b >= 0)) { break; } } for (int i = 0; i < n / 2; ++i) { if ((next_a < i) || (word[next_a])) { for (int j = next_a + 1; j < n; ++j) { if (!word[j]) { next_a = j; break; } } } if ((next_b < i) || (!word[next_b])) { for (int j = next_b + 1; j < n; ++j) { if (word[j]) { next_b = j; break; } } } if (word[i] == word[n - 1 - i]) { continue; } if (word[i]) { if (next_a == n - 1 - i) { moves += (next_a - i) / 2; break; } moves += next_a - i; word[i] = false; word[next_a] = true; } else { if (next_b == n - 1 - i) { moves += (next_b - i) / 2; break; } moves += next_b - i; word[i] = true; word[next_b] = false; } } printf("%lld\n", moves); return 0; } |
English