标签:out cst min 字符 name 字符串 strlen end ==
如果是环状可以复制一份变直线
求字符串最小表示法,如果存在一种,两个字符串相比前面相同,但是到后面不相同,且必然其中一个字典序打一些,那么大的字符串必然不可1-k前的子窜就不能满足条件。 1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4
5 char s[200];
6 int main() {
7 int t;
8 cin >> t;
9 while(t --) {
10
11 cin >> s + 1;
12
13 int n = strlen(s + 1);
14 for(int i = 1; i <= n; ++ i) s[n + i] = s[i];
15 int i = 1, j = 2, k;
16 while(i <= n && j <= n){
17 for (k = 0; k <= n && s[i+k] == s[j+k]; ++ k);
18 if(k == n) break;
19 if(s[i+k] > s[j+k])
20 {
21 i = i + k + 1;
22 if(i == j) ++ i;
23 }
24 else {
25 j = j + k + 1;
26 if(i == j) ++ j;
27 }
28 }
29 int ans = min(i, j);
30 for(i = ans; i < n+ans; ++ i)
31 cout << s[i];
32 cout << endl;
33 }
34 return 0;
35 } 环状序列 Circular Sequence
标签:out cst min 字符 name 字符串 strlen end ==
原文地址:https://www.cnblogs.com/rstz/p/13365513.html