当做开始复习字符串了oh yeah。这道题明显就是求字符串的最小表示。复习模板了!
P.S.:这道题WA了好几次。太坑爹了。一个字符串还分几行读入!!改过来就A了。
贴上模板:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1000005];
int main()
{
int len;
scanf("%d",&len);
char ch;
int cnt=0;
while(ch=getchar()){
if(ch<'a' || ch>'z')continue;
s[cnt++]=ch;
if(cnt==len)break;
}
int i=0,k=0,j=1;
while(i<len && j<len && k<len){
int t=s[(i+k)%len]-s[(j+k)%len];
if(!t)k++;
else{
if(t<0) j=j+k+1; else i=i+k+1;
if(i==j) j++;
k=0;
}
}
printf("%d\n",min(i,j));
return 0;
}
P.S.:这个模板稍微改一改:吧if(t<0)改成if(t>0)就可以求最大表示了。嗯哼。