杭电2609

来源:互联网 发布:删除cadbak文件软件 编辑:程序博客网 时间:2024/05/18 02:50
#include <iostream>#include <cstdio>#include <cstring>#include <map>using namespace std;string a;int N;map<string,int>flag;int main(){int i,j,k,m,n,len,num;string s;while(~scanf("%d",&N)){num=0;flag.clear();for(i=1;i<=N;i++){s="";//置空串 cin>>a;j=0;//j为记录最小串的起始位置 k=1;//方便比较所以设置的变量 len=a.size();while(k<len)//循环结束标志 {if(a[j]<a[k]) k++;else if(a[j]>a[k]){j=k;k=j+1;}else {int sum;m=j;n=k;for(sum=1;sum<len;sum++)//循环次数 {m%=len;//取余很重要,等于长度时再从第一个位置开始比较 n%=len;if(a[m]<a[n]){k++;break;}else if(a[m]>a[n]){j=k;k++;break;}m++;n++;}if(sum==len)//千万不要忘了始终相等的这种情况也要处理 {k++;}}}int p;for(p=1;p<=len;p++)//从j位置开始截取子串 {s=s+a.substr(j,1) ;j++;j%=len;}if(flag[s]!=1)//前面没有该串,则num++,并将该串标记 {num++;flag[s]=1;}}cout<<num<<endl;}return 0;}

0 0
原创粉丝点击