#include <bits/stdc++.h> using namespace std; typedef long long LL; string s; int a, b; LL res; void f(){ int A=0; for(unsigned i =0; i<s.size()/2; i++){ if(s[i]=='a')A++; } if(a/2 < A){ A = A - a/2; int i=s.size()/2-1; int j=s.size()/2; while(A){ while(s[i] != 'a'){ i--; } while(s[j] != 'b'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } }else{ A = a/2 - A; int i=s.size()/2-1; int j=s.size()/2; while(A){ while(s[i] != 'b'){ i--; } while(s[j] != 'a'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } } vector<int> ab; vector<int> ba; for(unsigned i=0, j=s.size()-1; i<s.size()/2; i++, j--){ if(s[i]=='a' && s[j]=='b')ab.push_back(i); if(s[i]=='b' && s[j]=='a')ba.push_back(i); } for(unsigned i=0; i<ab.size(); i++){ res+=abs(ab[i] - ba[i]); } } void f2(){ if(b%2){ for(unsigned i=0; i<s.size(); i++){ s[i] = s[i]=='a' ? 'b' : 'a'; } swap(a, b); } int A=0; for(unsigned i=0; i<s.size()/2; i++){ if(s[i]=='a')A++; } if(s[s.size()/2]=='b'){ if(a/2 < A){ for(unsigned i=s.size()/2-1; i>=0; i--){ if(s[i]=='a'){ res+=abs(LL(s.size()/2) - LL(i)); swap(s[s.size()/2], s[i]); A--; break; } } } else{ for(unsigned i=s.size()/2+1; i<s.size(); i++){ if(s[i]=='a'){ res+=abs(LL(s.size()/2) - LL(i)); swap(s[s.size()/2], s[i]); break; } } } } if(a/2 < A){ A = A - a/2; int i=s.size()/2-1; int j=s.size()/2+1; while(A){ while(s[i] != 'a'){ i--; } while(s[j] != 'b'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } }else{ A = a/2 - A; int i=s.size()/2-1; int j=s.size()/2+1; while(A){ while(s[i] != 'b'){ i--; } while(s[j] != 'a'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } } vector<int> ab; vector<int> ba; for(unsigned i=0, j=s.size()-1; i<s.size()/2; i++, j--){ if(s[i]=='a' && s[j]=='b')ab.push_back(i); if(s[i]=='b' && s[j]=='a')ba.push_back(i); } for(unsigned i=0; i<ab.size(); i++){ res+=abs(ab[i] - ba[i]); } } int main(){ ios_base::sync_with_stdio(false); cin>>s; for(unsigned i=0; i<s.size(); i++){ if(s[i]=='a')a++; else b++; } if(s.size()%2==0 && (a%2 || b%2)){ cout<<"-1\n"; return 0; } if(s.size()%2==0){ f(); cout<<res<<"\n"; } else{ f2(); 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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | #include <bits/stdc++.h> using namespace std; typedef long long LL; string s; int a, b; LL res; void f(){ int A=0; for(unsigned i =0; i<s.size()/2; i++){ if(s[i]=='a')A++; } if(a/2 < A){ A = A - a/2; int i=s.size()/2-1; int j=s.size()/2; while(A){ while(s[i] != 'a'){ i--; } while(s[j] != 'b'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } }else{ A = a/2 - A; int i=s.size()/2-1; int j=s.size()/2; while(A){ while(s[i] != 'b'){ i--; } while(s[j] != 'a'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } } vector<int> ab; vector<int> ba; for(unsigned i=0, j=s.size()-1; i<s.size()/2; i++, j--){ if(s[i]=='a' && s[j]=='b')ab.push_back(i); if(s[i]=='b' && s[j]=='a')ba.push_back(i); } for(unsigned i=0; i<ab.size(); i++){ res+=abs(ab[i] - ba[i]); } } void f2(){ if(b%2){ for(unsigned i=0; i<s.size(); i++){ s[i] = s[i]=='a' ? 'b' : 'a'; } swap(a, b); } int A=0; for(unsigned i=0; i<s.size()/2; i++){ if(s[i]=='a')A++; } if(s[s.size()/2]=='b'){ if(a/2 < A){ for(unsigned i=s.size()/2-1; i>=0; i--){ if(s[i]=='a'){ res+=abs(LL(s.size()/2) - LL(i)); swap(s[s.size()/2], s[i]); A--; break; } } } else{ for(unsigned i=s.size()/2+1; i<s.size(); i++){ if(s[i]=='a'){ res+=abs(LL(s.size()/2) - LL(i)); swap(s[s.size()/2], s[i]); break; } } } } if(a/2 < A){ A = A - a/2; int i=s.size()/2-1; int j=s.size()/2+1; while(A){ while(s[i] != 'a'){ i--; } while(s[j] != 'b'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } }else{ A = a/2 - A; int i=s.size()/2-1; int j=s.size()/2+1; while(A){ while(s[i] != 'b'){ i--; } while(s[j] != 'a'){ j++; } A--; res+=j-i; swap(s[i], s[j]); } } vector<int> ab; vector<int> ba; for(unsigned i=0, j=s.size()-1; i<s.size()/2; i++, j--){ if(s[i]=='a' && s[j]=='b')ab.push_back(i); if(s[i]=='b' && s[j]=='a')ba.push_back(i); } for(unsigned i=0; i<ab.size(); i++){ res+=abs(ab[i] - ba[i]); } } int main(){ ios_base::sync_with_stdio(false); cin>>s; for(unsigned i=0; i<s.size(); i++){ if(s[i]=='a')a++; else b++; } if(s.size()%2==0 && (a%2 || b%2)){ cout<<"-1\n"; return 0; } if(s.size()%2==0){ f(); cout<<res<<"\n"; } else{ f2(); cout<<res<<"\n"; } return 0; } |