字符串学习笔记

【字符串学习笔记】

字符串哈希 

最小表示法 

点击查看代码
#include <bits/stdc++.h>
#define int long long
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define drep(i, a, b) for (int i = (a); i >= (b); --i)
#define clr(a) memset(a, 0, sizeof(a))
#define full(a) memset(a, 0x3f, sizeof(a))
#define INF 0x3f3f3f3f
#define FIN 0xc0c0c0c0
using namespace std;

inline int read() {
    int a = 0, b = 1;char c = getchar();
    while (c < '0' || c>'9') { if (c == '-') b = -1;c = getchar(); }
    while (c >= '0' && c <= '9') { a = (a << 1) + (a << 3) + c - '0';c = getchar(); }
    return a * b;
}

const int N = 3e5 + 5;

int n, a[N], st;

int min_show() {
    int i = 0, j = 1, k = 0;
    while (i < n && j < n && k < n) {
        if (a[(i + k) % n] == a[(j + k) % n])
            k++;
        else {
            if (a[(i + k) % n] > a[(j + k) % n])
                i = i + k + 1;
            else
                j = j + k + 1;
            if (i == j) i++;
            k = 0;
        }
    }
    return min(i, j);
}

signed main() {
    n = read();
    rep(i, 0, n - 1) a[i] = read();
    st = min_show();
    rep(i, 0, n - 1)
        printf("%d ", a[(st + i) % n]);
    return 0;
}
posted @ 2021-11-25 22:43  Xyea  阅读(33)  评论(0)    收藏  举报