LA 2755 Hidden Password(字符串最小表示法)
参考论文如何寻找字符串的最小表示法
include<cstdio>
include<cstring>
include<iostream>
include<algorithm>
include<queue>
using namespace std;
const int maxn=200000+100;
int T;
int L;
char str[maxn],strtmp[maxn];
void solve();
int main()
{
scanf("%d",&T);
while(T--){
solve();
}
return 0;
}
void solve()
{
// int n=L;
scanf("%d",&L);
scanf("%s",str);
strcpy(strtmp,str);
strcat(str,strtmp);
int i,j;
i=0;j=1;
int k=0;
while(i<L&&j<L){
while(k<L&&str[i+k]==str[j+k]){
k++;
}
if(k==L) break;
if(str[i+k]<str[j+k]){
j=j+k+1;
}
else{
i=max(i+k+1,j);
j=i+1;
}
k=0;
}
printf("%d\n",i);
}