摘要:
题意:有n个环形字符串,一个环形字符串移动会形成不能的字符串,我们把它们看作同一串字符串,求有多少个不同的字符串.......思路:用最小表示发将一个环形串的最小字典序找出来,然后让这个环形串按照这个顺序来组成一个新的串,其他串都这样处理,然后去重,输出结果就是了.......#include#include#include#includeusing namespace std;char s[10005][105];struct node{ char ch[105];}t[10005];int cmp(const node a,const node b){ if(strcmp(a.ch,b.c 阅读全文
摘要:
题意:给你一串字符串,但是这串字符串是环形的,让你找个位置切开,使得它的字典序最小.......思路:典型的最小表示法.......#include#include#includeusing namespace std;char str[20000];int work(int m) { int i,j,l; i=0; j=1; while(im) break; if(str[(i+l)%m] > str[(j+l)%m]) i=i+l+1; else j=j+l+1; if(i... 阅读全文
摘要:
最小表示法: 初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:1、 str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。2、 str[i+k]m) break; if(str[(i+l)%m] > str[(j+l)%m]) i=i+l+1; else j=j+l+1; if(i==j) j=i+1; } if(i0) j = j+k+1; else i = i+... 阅读全文