hunnu 小明的烦恼——找字符串

时间:2023-03-08 16:47:05

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
bcda
aaa
a
adab
Sample Output
3
0
0
2
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 ;
}