详情参考:P1709
个人觉得和kmp算法有些类似,就是细节较多
取min(i,j)意思是如果两个字符串是一样的,则选开头最小的那个
k是最重要的优化
读入的时候最好用cin以防换行的干扰
inline int node(int l)
{
int i=0,j=1,k=0;
while(i<l&&j<l)
{
k=0;
while(s[(i+k)%l]==s[(j+k)%l]&&k<l) k++;
if(k==l) return min(i,j);
if(s[(i+k)%l]>s[(j+k)%l]) i=i+k+1;
else j=j+k+1;
if(i==j) j++;
}
return min(i,j);
}
int main()
{
n=read();
for(int i=0;i<n;i++) cin>>s[i];
int ans=node(n);
cout<<ans;
return 0;
}