最小表示法 学习笔记
理解
若s[x..x+k-1]同s[y...y+k-1]
s[x+k]<s[y+k],则所有z<=k
都有s[x+z....x+k]<s[y+z.....y+k]
所以y....y+k都不可能作为最小表示法的左端点
先粘一波Sdchr的代码(稍微改了点)
int n;
char s[N<<1];
int Solve(void){
int x=1,y=2,k=0;
repu(i,1,n) s[i+n]=s[i];//倍长
while (x<=n&&y<=n&&k<=n){
int t=s[x+k]-s[y+k];
if (s[x+k]==s[y+k]) k++;
else{
if (s[y+k]>s[x+k]) y+=k+1;
else x+=k+1;
if (x==y) y++;
k=0;
}
}
return min(x,y);
}