#include<iostream> #include<string> using namespace std; bool palindrom(string a){ int i=0,l; for ( int j = a.length()-1; i < j;j--) { l=j; if (a[i] != a[j])break; ++i; } if(a[i]==a[l-1])i++; if (i < l) return false; else return true; } void zamiana(int &spr,string &w, int st, int ko, char sz){ spr=0; for(int i=st+1;i<ko;++i){ if(w[i]==sz){ w[i]=w[st]; spr=1; break; } } } int poprawianie(string &w){ int c=0; int i=0; int spr=0; for(int j=w.length()-1;i<j;--j){ if(w[i]!=w[j]){ zamiana(spr,w,i,j,w[j]); if(spr==0)return -1; ++c; } ++i; } return c; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); string wyr; cin>>wyr; int a=0,b=0; for(int i=0;i<wyr.length();++i){ if(wyr[i]=='a')++a; else ++b; } if(a%2!=0 && b&2!=0){ cout<<-1; return 0; } if(palindrom(wyr)){ cout<<0; return 0; } cout<<poprawianie(wyr); 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 | #include<iostream> #include<string> using namespace std; bool palindrom(string a){ int i=0,l; for ( int j = a.length()-1; i < j;j--) { l=j; if (a[i] != a[j])break; ++i; } if(a[i]==a[l-1])i++; if (i < l) return false; else return true; } void zamiana(int &spr,string &w, int st, int ko, char sz){ spr=0; for(int i=st+1;i<ko;++i){ if(w[i]==sz){ w[i]=w[st]; spr=1; break; } } } int poprawianie(string &w){ int c=0; int i=0; int spr=0; for(int j=w.length()-1;i<j;--j){ if(w[i]!=w[j]){ zamiana(spr,w,i,j,w[j]); if(spr==0)return -1; ++c; } ++i; } return c; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); string wyr; cin>>wyr; int a=0,b=0; for(int i=0;i<wyr.length();++i){ if(wyr[i]=='a')++a; else ++b; } if(a%2!=0 && b&2!=0){ cout<<-1; return 0; } if(palindrom(wyr)){ cout<<0; return 0; } cout<<poprawianie(wyr); return 0; } |