1#include<stdio.h>
2#include<string.h>
3#include<stdlib.h>
4char a[10000][1000];
5int cmp(const void *a,const void *b)
6{
7 return strcmp((char *)a,(char *)b);
8}
9int zh(char *s, int l)//最小表示法 从return值开始为最小
10{
11 int i = 0, j = 1, k = 0, t;
12 while (i < l && j < l && k < l)
13 {
14 t = s[(i + k)%l] - s[(j + k)%l];
15 if (!t) ++ k;
16 else
17 {
18 if (t > 0)
19 {
20 i = i + k + 1;
21 }
22 else
23 {
24 j = j + k + 1;
25 }
26 if (i == j) ++j;
27 k = 0;
28 }
29 }
30 return i>j?j:i;
31}
32int main()
33{
34 int n,si,q,l;
35 int i,j,p,c,k;
36 char b[1000],cc[1000];
37 while(scanf("%d",&n)!=EOF)
38 {
39 c=0;
40 memset(a,0,sizeof(a));
41 getchar();
42 for(i=0;i<n;i++)
43 {
44 scanf("%s",b);
45 l=strlen(b);
46 si=zh(b,l);
47 for(j=si,k=0;j<l;j++,k++)
48 {
49 a[i][k]=b[j];
50 }
51 for(j=0;j<si;j++,k++)
52 {
53 a[i][k]=b[j];
54 }
55 a[i][k]='\0';
56 }
57 qsort(a,n,sizeof(a[i]),cmp);
58 c=1;
59 for(i=1;i<n;i++)
60 {
61 if(strcmp(a[i-1],a[i])!=0)
62 c++;
63 }
64 printf("%d\n",c);
65 }
66}
67
68
posted on 2009-01-27 14:06
混沌的云 阅读(201)
评论(0) 编辑 收藏 引用