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;
}