http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0
小明的烦恼——找字符串 |
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB |
Total submit users: 108, Accepted users: 68 |
Problem 11544 : No special judgement |
Problem description |
小明是个很优秀的同学,他除了特别公正外,他也很细心,当然老师肯定也知道,这不,老师又有事情找他帮忙了,老师每周都会给他一个字符串A,然后问小明“A字符串的循环移位产生的所有字符串中,字典序最小的是哪个”,于是小明屁颠屁颠的一个一个比对,但是长久下来,小明实在是受不了了,所以他想请你帮帮他。同样,你帮他解决,你就会多AC一个题目。 Hint: 如果A字符串为bcda,那么其所有的循环移位的新字符串有cdab,dabc,abcd,和他自己bcda一共四个,然后在这四个中,字典序最小的为abcd,那么输出这个字符串中的第一次字符在原字符串中的位置,为3,如果有多个结果,输出数字最小的。 |
Input |
输入有T组, 以后每组第一行有一个字符串S,长度<=5000000,都是小写字母。 |
Output |
对于每一个case,输出结果。 |
Sample Input |
4 |
Sample Output |
3 |
Problem Source |
HUNNU Contest |
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char str[];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
int len=strlen(str);
int i=,j=,k=;
while(i<len&&j<len&&k<len)
{
int l=str[(i+k)%len]-str[(j+k)%len];
if(l==)
{
k++;
}
if(l>)
{
i=i+k+;
k=;
}
if(l<)
{
j=j+k+;
k=;
}
if(i==j)
{
j++;
} }
printf("%d\n",min(i,j)); }
return ;
}