#include <iostream> #include <string.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); char w[200001]; cin >> w; int len, len2, na, nb; long long int res; char ca, cb, tc; len = strlen(w); len2 = len / 2; res = 0; na = -1; for (int i = 1; i < len; i++) { if (w[i] != w[0]) { na = i; break; } } if (na == -1) { cout << "0\n"; return 0; } for (int i = len - 2; i >= 0; i--) { if (w[len - 1] != w[i]) { nb = i; break; } } for (int i = 0; i < len2; i++) { // cout << "START I:" << i << " NA:" << na << " NB:" << nb << "\n"; // cout << w << "\n"; ca = w[i]; cb = w[len - i - 1]; if (ca != cb) { if (i == len - i - 2) { cout << "-1\n"; return 0; } if (na <= i) { for (na = i + 1; na < len; na++) { if (w[i] != w[na]) { break; } } } if (nb >= len - i - 1) { for (nb = len - i - 2; nb >= 0; nb--) { if (w[len - i - 1] != w[nb]) { break; } } } if (na - i < (len - i - 1) - nb) { res = res + na - i; tc = w[i]; w[i] = w[na]; w[na] = tc; if (na > nb) { nb++; } if (na > i + 1) { for (int j = na + 1; j < len; j++) { if (w[na] != w[j]) { na = j; break; } } } } else { res = res + (len - i - 1) - nb; tc = w[len - i - 1]; w[len - i - 1] = w[nb]; w[nb] = tc; if (nb < na) { na--; } if (nb < len - i - 2) { for (int j = nb - 1; j >= 0; j--) { if (w[nb] != w[j]) { nb = j; break; } } } } } // cout << "I:" << i << " R:" << res << " | " << w << "\n"; } cout << res << "\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 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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #include <iostream> #include <string.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); char w[200001]; cin >> w; int len, len2, na, nb; long long int res; char ca, cb, tc; len = strlen(w); len2 = len / 2; res = 0; na = -1; for (int i = 1; i < len; i++) { if (w[i] != w[0]) { na = i; break; } } if (na == -1) { cout << "0\n"; return 0; } for (int i = len - 2; i >= 0; i--) { if (w[len - 1] != w[i]) { nb = i; break; } } for (int i = 0; i < len2; i++) { // cout << "START I:" << i << " NA:" << na << " NB:" << nb << "\n"; // cout << w << "\n"; ca = w[i]; cb = w[len - i - 1]; if (ca != cb) { if (i == len - i - 2) { cout << "-1\n"; return 0; } if (na <= i) { for (na = i + 1; na < len; na++) { if (w[i] != w[na]) { break; } } } if (nb >= len - i - 1) { for (nb = len - i - 2; nb >= 0; nb--) { if (w[len - i - 1] != w[nb]) { break; } } } if (na - i < (len - i - 1) - nb) { res = res + na - i; tc = w[i]; w[i] = w[na]; w[na] = tc; if (na > nb) { nb++; } if (na > i + 1) { for (int j = na + 1; j < len; j++) { if (w[na] != w[j]) { na = j; break; } } } } else { res = res + (len - i - 1) - nb; tc = w[len - i - 1]; w[len - i - 1] = w[nb]; w[nb] = tc; if (nb < na) { na--; } if (nb < len - i - 2) { for (int j = nb - 1; j >= 0; j--) { if (w[nb] != w[j]) { nb = j; break; } } } } } // cout << "I:" << i << " R:" << res << " | " << w << "\n"; } cout << res << "\n"; return 0; } |