题意:
已知某字符串\(str\)满足\(str_1 > max\{str_2,str_3 \cdots str_n\}\),现要求把这个字符串分成连续的三组,然后每组都翻转,问字典序最小是什么?
思路:
因为\(str_1 > max\{str_2,str_3 \cdots str_n\}\),所以第一部分直接翻转后跑\(sa\)求字典序最小就行了。那么现在问题转化为:把这个字符串分成两半,然后每组都翻转,问字典序最小是什么?
我们假设这个字符串为
\(s_1s_2 \cdots s_n\),那么可以得到分成两半反转后为
\(s_ks_{k-1}s_{k-2} \cdots s_1s_ns_{n-1} \cdots s_{k+1}\),我们可以发现,这个串其实就是
\(s_ns_{n-1}s_{n-2} \cdots s_1s_ns_{n-1} \cdots s_{1}\)的一个子串,那么我就把这个串反向复制两遍,然后后缀数组求字典序最小即可。
tips:多组输入必wa
代码:
#include