#include<bits/stdc++.h> using namespace std; char slowo[200010]; bool tab[200010]; bool l[100010]; bool p[100010]; vector<int>w; int main() { int n, i=0, a=0, b=0; scanf("%s", slowo); while(slowo[i]=='a' || slowo[i]=='b'){ if(slowo[i]=='a') a++; else b++; tab[i] = (slowo[i]=='b'); i++; } n = i; if(a%2 && b%2){ printf("-1\n"); return 0; } if(b%2){ swap(a,b); for(i=0;i<n;i++) tab[i]^=1; } //b jest parzyscie wiele razy for(i=0;i<n;i++) if(tab[i]) w.push_back(i); long long wynik = 0; //for(i=0;i<n;i++) // printf("%d", tab[i]); //printf("%d\n", w.size()); for(i=0;i<(int)w.size()/2;i++) { wynik+=abs(w[i] - ( n-1-w[w.size()-1-i]));// - min(w[i], n-1-w[w.size()-1-i]); /* if(w[i]<n-1-w[w.size()-1-i]) wynik+=n-1-w[i]-w[w.size()-1-i]; else wynik+=w[i]-(n-1-w[w.size()-1-i]);*/ //printf("%d %d | %d %d\n", w[i], w[w.size()-1-i], w[i], n-1-w[w.size()-1-i]); } printf("%lld\n", wynik); }
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 | #include<bits/stdc++.h> using namespace std; char slowo[200010]; bool tab[200010]; bool l[100010]; bool p[100010]; vector<int>w; int main() { int n, i=0, a=0, b=0; scanf("%s", slowo); while(slowo[i]=='a' || slowo[i]=='b'){ if(slowo[i]=='a') a++; else b++; tab[i] = (slowo[i]=='b'); i++; } n = i; if(a%2 && b%2){ printf("-1\n"); return 0; } if(b%2){ swap(a,b); for(i=0;i<n;i++) tab[i]^=1; } //b jest parzyscie wiele razy for(i=0;i<n;i++) if(tab[i]) w.push_back(i); long long wynik = 0; //for(i=0;i<n;i++) // printf("%d", tab[i]); //printf("%d\n", w.size()); for(i=0;i<(int)w.size()/2;i++) { wynik+=abs(w[i] - ( n-1-w[w.size()-1-i]));// - min(w[i], n-1-w[w.size()-1-i]); /* if(w[i]<n-1-w[w.size()-1-i]) wynik+=n-1-w[i]-w[w.size()-1-i]; else wynik+=w[i]-(n-1-w[w.size()-1-i]);*/ //printf("%d %d | %d %d\n", w[i], w[w.size()-1-i], w[i], n-1-w[w.size()-1-i]); } printf("%lld\n", wynik); } |