题意:
求循环字符串的最小表示法
思路:
裸算法题
代码:
/*
ID: housera1
PROG: hidden
LANG: C++
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 200010
char in[N],d[N],*a;
int n;
int GetMin(char *P)
{
int len=strlen(P);
int i=0,j=1,k=0;
while(i<len&&j<len&&k<len)
{
int t=P[(i+k)%len]-P[(j+k)%len];
if(!t)
k++;
else
{
if(t>0)
i+=k+1;
else
j+=k+1;
if(i==j)
j++;
k=0;
}
}
return i<j?i:j;
}
int main()
{
int Debug=0;
if(!Debug)
{
freopen("hidden.in","r",stdin);
freopen("hidden.out","w",stdout);
}
int i,j,k;
scanf("%d",&n);
while(~scanf("%s",in)) strcat(d,in);
printf("%d\n",GetMin(d));
return 0;
}