求字符串循环同构中字典序最小的,用最小表示法做的。
1 #include <stdio.h> 2 #include <string.h> 3 const int N = 10010; 4 char s[N]; 5 int main() 6 { 7 int n,i,j,k,t,l; 8 scanf("%d",&n); 9 while(n--) 10 { 11 scanf("%s",s); 12 l = strlen(s); 13 i = k = 0; j = 1; 14 while(i<l && j<l && k<l) 15 { 16 t = s[(i+k)%l] - s[(j+k)%l]; 17 if(!t) k++; 18 else 19 { 20 if(t > 0) i += k+1; 21 else j += k+1; 22 if(i == j) j++; 23 k = 0; 24 } 25 } 26 printf("%d\n",++i < ++j ?i :j); 27 } 28 return 0; 29 }