隐藏密令 计蒜客
有一种密令,会选择一个由L个小写字母组成的字符串,然后把字符串顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串。这样将得到一些字符串,他把它们排序后取出第一个字符串。把这个字符串的第一个字母在原字符串中的位置做为密令。
第一个字母所在的位置是0,如字符串alabala,按操作得到7个字符串,排序后得:
aalabal abalaal alaalab alabala balaala laalaba labalaa
第一个字符串为aalabal,这个a在原字符串位置为6,则6为密令。 当字符串相同时,输出编号最小的(即对于aaaa输出0)。
输入第一行包括一个整数L(5≤L≤100000),从第二行往后是由L个小写字母组成的那个字符串,每满72个小写字母换一行。
输出包括一行,为得到的密令。
样例1
输入:
7
alabala
输出:
6
#include<stdio.h>
int main(){
int n;
char p[100000];
int i=0;
scanf("%d",&n);
while(i<n){
if((p[i]=getchar())!='\n')
i++;
}
p[i]='\0';
int min; //记录最小字符串地址
int c; //当前字符串地址
min=0;
c=min+1;
i=0; //移动地址
while(1){
if(p[(min+i)%n]>p[(c+i)%n]){
min=c;
c=min+1;
if(c>=n) break;
i=0;
}
else if(p[(min+i)%n]==p[(c+i)%n]){
i++;
if(i>n){
break;
}
}
else{
c=c+i+1;
i=0;
}
}
printf("%d\n",min);
return 0;
}
浙公网安备 33010602011771号