最小表示法
对于一个字符串
通过这种方法,我们可以快速搞同构串 qwq
我们先 断环成链,那么就变成了找长度为
我们用
我们考虑比较
我们很容易发现,因为
唔,对于扫完循环元的情况可以先跑出来(
#include<bits/stdc++.h>
#define MN 601000
using namespace std;
int n, a[MN];
signed main() {
scanf("%d", &n);
for(int i=1; i<=n; ++i) {
scanf("%d", a+i);
a[i+n]=a[i];
}
int i=1, j=2, k;
while(i<=n&&j<=n) {
for(k=0; k<=n; ++k)
if(a[i+k]!=a[j+k]) break;
if(k==n) break;
if(a[i+k]>a[j+k]) i=i+k+1;
else j=j+k+1;
if(i==j) i++;
}
for(k=min(i,j); k<min(i,j)+n; ++k)
printf("%d ", a[k]);
return 0;
}