fork(3) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main () {
  5. int T;
  6. cin >> T;
  7. for (int i = 0; i < T; i++) {
  8. string s;
  9. cin >> s;
  10. int l = s.length();
  11. map<char, int> chara;
  12. set<char> chara1;
  13. for (int j = 0; j < l; j++) {
  14. chara[s[j]] += 1;
  15. chara1.insert(s[j]);
  16. }
  17. int index = 0;
  18. vector<char> seq(chara1.size());
  19. vector<int> seg(chara1.size());
  20. for (int j = 0; j < l; j++) {
  21. if (chara1.find(s[j]) != chara1.end()) {
  22. seg[index] = chara[s[j]];
  23. seq[index] = s[j];
  24. chara1.erase(s[j]);
  25. index += 1;
  26. }
  27. }
  28. int maxie = 0;
  29. int maxie_index = -1;
  30. for (int j = 0; j < seq.size(); j++) {
  31. if (seg[j] > maxie) {
  32. maxie = seg[j];
  33. maxie_index = j;
  34. }
  35. }
  36. if (maxie > l - maxie + 1) {
  37. cout << -1 << endl;
  38. return 0;
  39. }
  40. index = 0;
  41. int j = 0;
  42. char tmp[l];
  43. for (int t = 0; t < l; t++) {
  44. tmp[t] = 'q';
  45. }
  46. while(seg[maxie_index] > 0) {
  47. tmp[2 * j] = seq[maxie_index];
  48. j++;
  49. seg[maxie_index]--;
  50. }
  51. while (index < chara.size()) {
  52. while (seg[index] > 0) {
  53. if (2 * j < l) {
  54. tmp[2 * j] = seq[index];
  55. seg[index]--;
  56. j++;
  57. }
  58. else {
  59. if (l % 2 == 0) {
  60. tmp[((2 * j) % l) + 1] = seq[index];
  61. seg[index]--;
  62. j++;
  63. }
  64. else {
  65. tmp[(2 * j) % l] = seq[index];
  66. seg[index]--;
  67. j++;
  68. }
  69. }
  70. }
  71. index++;
  72. if (index == maxie_index) index++;
  73. }
  74. string ans(tmp);
  75. cout << ans.substr(0, l) << endl;
  76. }
  77. return 0;
  78. }
  79.  
Success #stdin #stdout 0s 2872KB
stdin
5
zzzaa
zbvzbvccczzzaaaa
aabbccdd
abcabcabc
mkjhmkjhnnmmmm
stdout
zazaz
zvzczczczababava
acacbdbd
abacacbcb
mkmjmjmhmhmnkn