CodeForces 1935A Entertainment in MAC
题目链接:Entertainment in MAC
思路
当当前操作次数n为偶数时,若原字符串大于反转字符串则可以将原字符串反转n - 2次,则得到的还是原字符串,此时反转一次,并将其再次反转的字符串加到反转字符串的末尾,此时得到词典最小的字符串,源字符串小于反转字符串时,直接将原字符串反转n次得到词典最小的字符串。
当当前操作次数为奇数时,若原字符串大于反转字符串,则将字符串反转n次,得到原串的反转字符串,即为词典最小的字符串,若原字符串小于反转字符串,则反转n - 1次,再将
当前字符串反转加到当前字符串末尾得到词典最小的字符串。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
void solve() {
ll n;
string s;
cin >> n >> s;
int l = 0, len = s.size();
while (s[l] == s[len - 1 - l] && l < len / 2) {
l++;
}
if (s[l] > s[len - l - 1]) {
if (n % 2) {
reverse(s.begin(), s.end());
}
else {
string auxious = s;
reverse(s.begin(), s.end());
s = s + auxious;
}
}
else if (s[l] < s[len - 1 - l]){
if (n % 2) {
string auxious = s;
reverse(s.begin(), s.end());
s = auxious + s;
}
}
cout << s << endl;
}
int main(){
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}