This documentation is automatically generated by online-judge-tools/verification-helper
// Tính vị trí của xâu xoay vòng có thứ tự từ điển nhỏ nhất của xâu s[]
// Tested:
// - https://cses.fi/problemset/task/1110/
int minmove(string s) {
int n = s.length();
int x, y, i, j, u, v; // x is the smallest string before string y
for (x = 0, y = 1; y < n; ++ y) {
i = u = x;
j = v = y;
while (s[i] == s[j]) {
++ u; ++ v;
if (++ i == n) i = 0;
if (++ j == n) j = 0;
if (i == x) break; // All strings are equal
}
if (s[i] <= s[j]) y = v;
else {
x = y;
if (u > y) y = u;
}
}
return x;
}
#line 1 "String/minmove.h"
// Tính vị trí của xâu xoay vòng có thứ tự từ điển nhỏ nhất của xâu s[]
// Tested:
// - https://cses.fi/problemset/task/1110/
int minmove(string s) {
int n = s.length();
int x, y, i, j, u, v; // x is the smallest string before string y
for (x = 0, y = 1; y < n; ++ y) {
i = u = x;
j = v = y;
while (s[i] == s[j]) {
++ u; ++ v;
if (++ i == n) i = 0;
if (++ j == n) j = 0;
if (i == x) break; // All strings are equal
}
if (s[i] <= s[j]) y = v;
else {
x = y;
if (u > y) y = u;
}
}
return x;
}