// Copyright 2024 Lotuses
#include <bits/stdc++.h>
template<typename T>
void read(T &r) { r = 0; static char ch, last; ch = getchar(), last = 'z'; while (ch < '0' || ch > '9') last = ch, ch = getchar(); while (ch >= '0' && ch <= '9') r = (r << 1) + (r << 3) + (ch ^ 48), ch = getchar(); r = (last == '-') ? -r : r; }
template<typename T, typename...Ts>
void read(T &arg, Ts&...arg_left) { read(arg); read(arg_left...); }
// #define int long long
typedef long long ll;
typedef unsigned long long ull;
typedef std::vector<int> vi;
typedef std::pair<int, int> pii;
#define sint static int
const int maxn = 1e6 + 10;
std::mt19937_64 mt;
char s[maxn], t[maxn];
ull h1[26], h2 = 1997, st[maxn], h3 = 1, x;
std::vector<char> v;
int f[maxn], sl = 0;
int main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
for (int i = 0; i < 26; i++) {
h1[i] = mt();
}
scanf("%s%s", s + 1, t + 1);
int n = strlen(s + 1), m = strlen(t + 1);
for (int i = 1; i <= m; i++) {
x *= h2; x += h1[t[i] - 'a'];
if (i < m) st[i] = st[i - 1] * h2 + h1[s[i] - 'a'], f[i] = i; h3 *= h2;
}
sl = m - 1;
for (int i = m; i <= n; i++) {
sl++;
st[sl] = st[sl - 1] * h2 + h1[s[i] - 'a'];
f[sl] = i;
if (sl >= m && st[sl] - st[sl - m] * h3 == x) {
sl = sl - m;
// puts("?");
}
}
for (int i = 1; i <= sl; i++) putchar(s[f[i]]);
puts("");
return 0;
}
在 h2=19937 时被最后一个点卡爆了。请问这是为什么呢,19937 有很强的性质吗?