题目链接:http://poj.org/problem?id=1509
题意:题目情节说了一顿,一看就是最小表示法啊,就是给你一个字符串环,找出第i位置使字符串以
此为起点是的字典序最小,模板题。
献上代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=20000+10;
char str[maxn];
int work(int m)
{
int i,j,l;
i=0; j=1;
while(i<m && j<m)
{
for(l=0;l<m;l++)
if(str[(i+l)%m]!=str[(j+l)%m]) break;
if(l>m) break;
if(str[(i+l)%m] > str[(j+l)%m])
i=i+l+1;
else
j=j+l+1;
if(i==j) j=i+1;
}
if(i<j) return i;
return j;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",str);
int L=strlen(str);
printf("%d\n",work(L)+1);
}
return 0;
}