链接
https://vjudge.net/problem/POJ-1509
题意
给你n个字符串。每个字符串首尾相连,问从哪剪断之后,字符串字典序最小。
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e5+5;
char s[maxn];
int main(){
int n;
cin>>n;
while(n--){
scanf("%s",s);
int len=strlen(s);
for(int i=len;i<2*len;i++){
s[i]=s[i-len];
}
s[2*len]=0;
int i=0,j=1,k=0;
while(i<len&&j<len){
for(k=0;k<len&&s[i+k]==s[j+k];k++)
if(k==len) break;
if(s[i+k]>s[j+k]){
i=i+k+1;
if(i==j) j++; //写成i++就wa了,想不通
}else{
j=j+k+1;
if(i==j) j++;
}
}
int ans=min(i,j);
cout<<ans+1<<endl;
}
return 0;
}