最小表示
只测试了几个数据
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 2e5 + 10;
int n;
string str;
int ans;
int main()
{
cin >> n;
cin >> str;
str += str;
str = " " + str;
int i = 1, j = 2, k;
while(i <= n && j <= n){
for(k = 0; k < n && str[i + k] == str[j + k]; ) k ++;
if(k == n) break;
if(str[i + k] > str[j + k]){
i = i + k + 1;
if(i == j) i ++;
}
else{
j = j + k + 1;
if(i == j) j ++;
}
}
ans = min(i, j);
for(int i = 0; i < n; i ++)
cout << str[ans + i];
puts("");
return 0;
}