2 solutions

  • 3
    @ 2026-2-20 22:07:28

    简单题。

    由于字母可以乱排,容易发现每个字母出现的次数只能是偶数,最多只能有一个字母的出现次数是奇数。用一个桶记录下来。

    如果超过 11 个字母的出现次数是奇数,那就 NO SOLUTION,否则正序输出一遍其它的所有字母;如果有 11 个字母的出现次数是奇数,那么中间输出这个字母;最后倒序输出一遍其它的所有字母。

    代码很简单,自己写(

    • 0
      @ 2026-2-23 16:30:24

      #include #include #include using namespace std;

      int main() { string s; cin >> s; vector cnt(26, 0); for (char c : s) { cnt[c - 'A']++; }
      int odd_count = 0; char odd_char = 0; for (int i = 0; i < 26; i++) { if (cnt[i] % 2 == 1) { odd_count++; odd_char = 'A' + i; } }

      if (odd_count > 1) {
          cout << "NO SOLUTION" << endl;
          return 0;
      }
      string half = "";
      for (int i = 0; i < 26; i++) {
          half += string(cnt[i] / 2, 'A' + i);
      }
      string middle = "";
      if (odd_count == 1) {
          middle = odd_char;
      }
      string result = half + middle;
      
      for (int i = half.length() - 1; i >= 0; i--) {
          result += half[i];
      }
      
      cout << result << endl;
      
      return 0;
      

      }

      • 1

      Information

      ID
      4625
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      7
      Tags
      # Submissions
      191
      Accepted
      51
      Uploaded By