这题可以用最小表示法来做,就是将所有的字符串都表示成可以表示的最小形式,然后统计一下不同的就行了。
#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s[11000];
string minimize(string ss)
{
int t,len;
string min_str,a;
len=ss.length(),t=len;
min_str=ss;
while(t--)
{
a= ss[0];
ss=ss.substr(1); //函数取子字符串,从字符串的第二个字符开始到结束
ss+=a;
if(min_str>ss)
{
min_str=ss;
}
}
return min_str;
}
int main()
{
int n;
string si;
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
{
cin>>si;
s[i]=minimize(si);
}
sort(s,s+n);
int cnt=1;
for(int i=0;i<n-1;i++)
if(s[i]!=s[i+1])
cnt++;
cout<<cnt<<endl;
}
return 0;
}