Georgiy1108

Игра в слова

Oct 21st, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. bool cmp(vector<int> &a, vector<int> &b)
  6. {
  7.     return a.size() > b.size();
  8. }
  9.  
  10. main()
  11. {
  12.     int q;
  13.     cin >> q;
  14.     while(q--)
  15.     {
  16.         string s;
  17.         cin >> s;
  18.         int n = s.size();
  19.         string was = s;
  20.         vector<vector<int>> v('z' - 'a' + 1, vector<int>());
  21.         for(int i = 0; i < n; i++)
  22.             v[s[i] - 'a'].push_back(i);
  23.         bool f = 0;
  24.         for(auto i : v)
  25.         {
  26.             if(i.size() > n / 2)
  27.             {
  28.                 cout << -1 << "\n";
  29.                 f = 1;
  30.                 break;
  31.             }
  32.         }
  33.         if(f)
  34.             continue;      
  35.         sort(v.begin(), v.end(), cmp);
  36.         while(v.back().empty())
  37.             v.pop_back();
  38.         int l = 0, r = v.size() - 1;
  39.         while(true)
  40.         {
  41.             if(v[l].empty())
  42.                 l++;
  43.             if(v[r].empty())
  44.                 r--;
  45.             if(l >= r)
  46.                 break;
  47.             swap(s[v[l].back()], s[v[r].back()]);
  48.             v[l].pop_back();
  49.             v[r].pop_back();
  50.         }
  51.         vector<int> o, c;
  52.         for(int i = 0; i < n; i++)
  53.             if(was[i] == s[i])
  54.                 o.push_back(i);
  55.             else
  56.                 c.push_back(i);
  57.         for(int i = 0; i < o.size(); i++)
  58.             swap(s[o[i]], s[c[i]]);
  59.         cout << s << "\n";
  60.     }
  61. }
Add Comment
Please, Sign In to add comment