链接
http://poj.org/problem?id=1509
大意
给定一个环,让其在一定部分断开,使得断开的串的字典序最小
思路
最小表示法裸题(当然你也可以用 )
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int t;
char s[10011];
inline int MRA(register char a[],register int len)//求最小表示
{
int i=0,j=1,k;
while(i<len&&j<len&&k<len)
{
if(a[(i+k)%len]==a[(j+k)%len]) k++;
else
if(a[(i+k)%len]>a[(j+k)%len])
{
i+=k+1;
if(i==j) i++;
k=0;
}
else
{
j+=k+1;
if(i==j) j++;
k=0;
}
}
return min(i,j);
}
signed main()
{
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
printf("%d\n",MRA(s,strlen(s))+1);
}
}