Advertisement
lodha1503

Untitled

Aug 19th, 2023
1,193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define pb push_back
  5. #define MOD1 1000000007
  6. #define MOD2 998244353
  7. #define NO cout << "NO" << endl
  8. #define YES cout << "YES" << endl
  9. ll expo(ll a, ll b, ll mod) {ll res = 1; while (b > 0) {if (b & 1)res = (res * a) % mod; a = (a * a) % mod; b = b >> 1;} return res;}
  10. ll mminvprime(ll a, ll b) {return expo(a, b - 2, b);}
  11. ll mod_add(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
  12. ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
  13. ll mod_sub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
  14. ll mod_div(ll a, ll b, ll m) {a = a % m; b = b % m; return (mod_mul(a, mminvprime(b, m), m) + m) % m;}
  15. void print(vector<int> &ans){for(auto x: ans) cout<<x<<" "; cout<<endl;}
  16.  
  17. // ========================================================================
  18.  
  19.  
  20. void solve()
  21. {
  22.    
  23.     int n;string s;
  24.     cin>>n;
  25.     cin>>s;
  26.     if(n%2!=0)
  27.     {
  28.         cout<<-1<<endl;
  29.         return;
  30.     }
  31.     vector<int> hm(26,0);
  32.     vector<int> rep(26,0);
  33.    
  34.     for(int i=0;i<n;i++)
  35.     {
  36.         hm[s[i]-'a']+=1;
  37.        
  38.         if(hm[s[i]-'a']>n/2)
  39.         {
  40.             cout<<-1<<endl;
  41.             return;
  42.         }
  43.     }
  44.    
  45.     for(int i=0;i<int(n/2);i++)
  46.     {
  47.         if(s[i] == s[n-i-1])
  48.             rep[s[i]-'a']+=1;
  49.     }
  50.    
  51.     vector<int> _rep;
  52.     for(int i=0;i<26;i++)
  53.     {
  54.         if(rep[i]!=0)
  55.             _rep.push_back(rep[i]);
  56.     }
  57.        
  58.     if(_rep.size()==0)
  59.     {
  60.         cout<<0<<endl;
  61.         return;
  62.     }
  63.    
  64.     if(_rep.size()==1)
  65.     {
  66.         cout<<_rep[0]<<endl;
  67.         return;
  68.     }
  69.     sort(_rep.begin(),_rep.end());
  70.     int n1=_rep.size();
  71.     vector<int> prefix(n1,0);
  72.     vector<int> suffix(n1,0);
  73.    
  74.     prefix[0]=_rep[0];
  75.     suffix[n1-1]=_rep[n1-1];
  76.    
  77.     for(int i=1;i<n1;i++)
  78.         prefix[i]=prefix[i-1]+_rep[i];
  79.    
  80.     for(int i=n1-2;i>=0;i--)
  81.         suffix[i]=suffix[i+1]+_rep[i];
  82.        
  83.    
  84.        
  85.    
  86.    
  87.    
  88.    
  89.    
  90.    
  91.     int ind=0;
  92.    
  93.     for(int i=n1-1;i>0;i--)
  94.     {
  95.    
  96.         if(suffix[i] == prefix[i-1])
  97.         {
  98.             cout<<suffix[i]<<endl;
  99.             return;
  100.         }
  101.         else if(suffix[i] > prefix[i-1])
  102.         {
  103.             ind=i;
  104.             break;
  105.         }
  106.     }
  107.    
  108.    
  109.     cout<<prefix[ind-1]+int(ceil((1.0*suffix[ind]-prefix[ind-1])/2))<<endl;
  110.  
  111.    
  112.    
  113.    
  114.    
  115.  
  116. }
  117.  
  118.  
  119. int main()
  120. {
  121.     int T;cin>>T;
  122.     while(T--)
  123.     {
  124.         solve();
  125.     }
  126. }
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement