标签:
题意:
给n个串,问不断的循环左移之后,有几个不相同的串。
思路:
全部转换的成字符串的最小表示法,统计。
裸题存模板
代码:
#include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #include"algorithm" #include"iostream" #include"map" using namespace std; int fun(char *t,int m) //最小表示的下标 { int i,j,k; i=k=0; j=1; while(k<m&&i<m&&j<m) { int tep=t[(i+k)%m]-t[(j+k)%m]; if(tep==0) k++; else { if(tep<0) j=(j+k+1); else i=(i+k+1); if(i==j) j++; k=0; } } return min(i,j); } int main() { int n; while(scanf("%d",&n)!=-1) { char x[125],y[125]; int ans=0; map<string,int>m; while(n--) { scanf("%s",x); int len=strlen(x); int tep=fun(x,len); for(int i=0; i<len; i++) y[i]=x[(tep+i)%len]; y[len]='\0'; if(m[y]==0) { ans++; m[y]=1; } } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/wdcjdtc/article/details/44751099