CSES - Palindrome Reorder | Sắp xếp lại xâu đối xứng

Xem PDF

Điểm: 1100 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Cho một xâu, nhiệm vụ của bạn là sắp xếp lại các kí tự của nó sao cho xâu đó trở thành một xâu đối xứng. Xâu đối xứng là xâu khi đọc xuôi hoặc ngược đều như nhau.

Input

  • Một dòng duy nhất gồm một xâu độ dài \(n\) chỉ chứa các kí tự A-Z.

Output

  • In ra một xâu đối xứng chứa các kí tự của xâu ban đầu. Bạn có thể in ra bất kỳ đáp án thỏa mãn nào. Nếu không có đáp án, in NO SOLUTION.

Constraints

  • \(1 \le n \le 10^6\)

Example

Sample input

AAAACACBA

Sample output

AACABACAA


Bình luận


  • -1
    clminhquan    3:56 p.m. 4 Tháng 8, 2023

    đây là code c++ cho ae theo lời hứa đây nè

    include <bits/stdc++.h>

    using namespace std;
    void printqueue(queue<char> q)
    {
    while (!q.empty())
    {
    cout << q.front();
    q.pop();
    }
    }
    void printstack(stack<char> s)
    {
    while (!s.empty())
    {
    cout << s.top();
    s.pop();
    }
    }
    int main()
    {
    string str;
    cin >> str;
    map<char, int> c;
    stack<char> s;
    queue<char> q;
    sort(str.begin(), str.end());
    for (char i:str) c[i]++;
    int odd = 0;
    char middle = '';
    for (pair<char,int> i:c)
    {
    if (i.second %2 !=0)
    {
    if (odd)
    {
    cout << "NO SOLUTION";
    return 0;
    }
    odd ++;
    middle = i.first;
    }
    for (int j = 0; j<i.second/2; j++)
    {
    q.push(i.first);
    s.push(i.first);
    }
    }
    printqueue(q);
    if (middle!='
    ') cout << middle;
    printstack(s);
    }

  • 3 bình luận nữa