UVA - 1584 Circular Sequence

xiaoxiao2021-02-28  31

//环状序列 uva1584 //收获: //如何判断环状序列的字典序:取余的巧妙应用,但是注意仅比较长度次数,否则循环可能无法退出,故要 n = strlen(s) i从0到(n-1), 比较n次即可 #include <iostream> #include <cstring> using namespace std; int maxn = 105; //环状串s的表示法p是否比表示法q的字典序小 int CompareSequence(const char*s, int p, int q) { int n = strlen(s); for (int i = 0; i < n; i++) if (s[(i + p) % n] != s[(i + q) % n]) return ( s[(i + p) % n] < s[(i + q) % n] ); return 0; } int main() { int t; cin >> t; char s[105]; while (t--) { cin >> s; int ans = 0, n = strlen(s); for (int i = 0; i < n; i++) if (CompareSequence(s, i, ans)) ans = i; for (int i = 0; i < n; i++) cout << s[(i + ans) % n]; cout << endl; } return 0; }
转载请注明原文地址: https://www.6miu.com/read-39019.html

最新回复(0)