最小表示法模板
auto getMin = [](vector<int> &v)->vector<int> {
int n = v.size();
int k = 0, i = 0, j = 1;
while (k < n && i < n && j < n) {
if (v[(i + k) % n] == v[(j + k) % n]) {
k++;
} else {
v[(i + k) % n] > v[(j + k) % n] ? i = i + k + 1 : j = j + k + 1;
if (i == j) i++;
k = 0;
}
}
i = min(i, j);
vector<int> res(n);
for (int x = i; x < n; x += 1) {
res[x - i] = v[x];
}
for (int x = 0; x < i; x += 1) {
res[x + n - i] = v[x];
}
return res;
};

浙公网安备 33010602011771号