最小表示法
cpp
int min_show(vector<int> a){
int i=0,j=1,k=0,n=a.size();
for(int i=0;i<n;i++)a.push_back(a[i]);
n=a.size();
while(i<n&&j<n&&k<n){
if(a[(i+k)%n]==a[(j+k)%n])k++;
else{
a[(i+k)%n]>a[(j+k)%n]?i+=k+1:j+=k+1;
if(i==j)j++;
k=0;
}
}
return min(i,j);
}duval版最小表示法
cpp
int min_show(vector<int> a){
int n=a.size(),i=0,j,k;
for(int i=0;i<n;i++)a.push_back(a[i]);
n=a.size();
int ans=0;
while(i<n/2){
ans=i;
j=i+1,k=i;
while(j<n&&a[k]<=a[j]){
if(a[k]<a[j])k=i;
else k++;
j++;
}
while(i<=k)i+=j-k;
}
return ans;
}