fork download
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. string removeReverse(string s)
  6. {
  7. int i, n = s.size(), j;
  8. set<int> h[26];
  9. for (i = 0; i < n; i++)
  10. {
  11. h[s[i] - 'a'].insert(i);
  12. }
  13.  
  14. int c = 0;
  15.  
  16. set<int> del;
  17. int cnt = 0;
  18.  
  19. while (1)
  20. {
  21. if (c == 0)
  22. {
  23. int in = INT_MAX;
  24. for (i = 0; i < 26; i++)
  25. {
  26.  
  27. if (h[i].size() >= 2)
  28. {
  29. in = min(in, *(h[i].begin()));
  30. }
  31. }
  32. if (in == INT_MAX)
  33. break;
  34. del.insert(in);
  35. h[s[in] - 'a'].erase(h[s[in] - 'a'].begin());
  36. c = 1 - c;
  37. cnt++;
  38. }
  39. else
  40. {
  41.  
  42. int in = -1;
  43. for (i = 0; i < 26; i++)
  44. {
  45.  
  46. if (h[i].size() >= 2)
  47. {
  48. in = max(in, *(h[i].rbegin()));
  49. }
  50. }
  51. if (in == -1)
  52. break;
  53.  
  54. del.insert(in);
  55. auto it1 = h[s[in] - 'a'].end();
  56. it1--;
  57. h[s[in] - 'a'].erase(it1);
  58. c = 1 - c;
  59. cnt++;
  60. }
  61. }
  62. string ss;
  63. for (i = 0; i < n; i++)
  64. {
  65. if (del.find(i) == del.end())
  66. ss += s[i];
  67. }
  68.  
  69. if (cnt % 2 == 1)
  70. reverse(ss.begin(), ss.end());
  71.  
  72. return ss;
  73. }
  74. signed main()
  75. {
  76.  
  77. string s;
  78. cin >> s;
  79. cout << removeReverse(s);
  80. }
  81.  
Success #stdin #stdout 0s 5520KB
stdin
abab
stdout
ba