#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string a;
int n[2] = {};
cin >> a;
// zlicza elementy
for (int i = 0; i < a.size(); i++)
{
if (a[i] == 'a')
n[0]++;
else
n[1]++;
}
// sprawdza czy istnieje takie rozwiazanie
if (n[0] % 2 == 1 && n[1] % 2 == 1)
cout << "-1";
else
{
int counter = 0, size = n[0] + n[1], j = 1;
// liczy liczbe zamian
for (int i = 0; i < size / 2; i++)
{
if (a[i] != a[size - i - 1])
{
int temp = size - i - 1;
j = max(j, i + 1);
// znajduje przeciwny element
while (a[i] == a[j] && a[size - j] == a[temp])
j++;
if (a[j] != a[i])
{
a[j] = a[i];
counter += j - i;
}
else
{
a[size - j] = a[temp];
counter += temp - (size - j);
}
}
}
cout << counter << '\n';
}
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 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); string a; int n[2] = {}; cin >> a; // zlicza elementy for (int i = 0; i < a.size(); i++) { if (a[i] == 'a') n[0]++; else n[1]++; } // sprawdza czy istnieje takie rozwiazanie if (n[0] % 2 == 1 && n[1] % 2 == 1) cout << "-1"; else { int counter = 0, size = n[0] + n[1], j = 1; // liczy liczbe zamian for (int i = 0; i < size / 2; i++) { if (a[i] != a[size - i - 1]) { int temp = size - i - 1; j = max(j, i + 1); // znajduje przeciwny element while (a[i] == a[j] && a[size - j] == a[temp]) j++; if (a[j] != a[i]) { a[j] = a[i]; counter += j - i; } else { a[size - j] = a[temp]; counter += temp - (size - j); } } } cout << counter << '\n'; } return 0; } |
English