CF 1864 B

发布时间 2023-09-08 15:12:51作者: 铜锣骚

B. Swap and Reverse

这道题需要进行分类讨论

  • \(k\)为奇数时,字符串上的奇数位和偶数位无法进行交换,所以求字典最小序只需要把奇偶位分开进行排序
  • \(k\)为偶数时,字符串上的奇数位和偶数位可以交换,直接进行排序即可

代码

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<ll, ll> PII;

const int N = 1010;
int t;
int n, k;


signed main()
{
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> t;
    while (t--)
    {
        cin >> n >> k;
        if (k & 1)
        {
            char a;
            string sj, so;
            for (int i = 0; i < n; i++)
            {
                cin >> a;
                if (i & 1)
                {
                    so.push_back(a);
                }
                else
                {
                    sj.push_back(a);
                }
            }
            sort(sj.begin(), sj.end());
            sort(so.begin(), so.end());
            for(int i = 0;i < n / 2;i++)
            {
                cout << sj[i] << so[i];
            }
            if(n & 1)
            {
                cout << sj.back();
            }
            cout << endl;
        }
        else
        {
            string s;
            cin >> s;
            sort(s.begin(), s.end());
            cout << s << endl;
        }
    }

    return 0;
}