hdu 2609(字符串最小表示法)

来源:互联网 发布:java教学视频高清 编辑:程序博客网 时间:2024/06/05 15:39

点击打开链接


题意:

有长知识了,字符串最小表示法。。。

看2003国家集训队周源的论文。。。。


#include"stdio.h"#include"string.h"#include"algorithm"using namespace std;#define N 10005struct node{char ss[101];}s[N];bool cmp(node a,node b){return strcmp(a.ss,b.ss)<0;}int minnum(char *s,int l){int i,j,k,t;i=k=0;j=1;while(i<l&&j<l&&k<l){t=(s[(i+k)%l]-s[(j+k)%l]);if(t==0)k++;else{if(t<0)i=i+k+1;else j=j+k+1;if(j==i)j++;k=0;}}return i<j?i:j;}int main(){int n;int i,j;char ss[101];while(scanf("%d",&n)!=-1){getchar();for(i=0;i<n;i++){gets(ss);int l=strlen(ss);int f=minnum(ss,l);int k=0;for(j=f;j<l;j++)s[i].ss[k++]=ss[j];for(j=0;j<f;j++)s[i].ss[k++]=ss[j];s[i].ss[k]=0;}sort(s,s+n,cmp);int ans=1;for(i=1;i<n;i++){if(strcmp(s[i].ss,s[i-1].ss)!=0)ans++;}printf("%d\n",ans);}return 0;}