直接上代码
#include <iostream>
#include <string>
#include <cstring>
#include <random>
using namespace std;
const int N = 100010;
int ne[N];
char p[N];
void initNe() {
int m = strlen(p + 1);
for (int i = 2, j = 0; i <= m; i++) {
while (j && p[i] != p[j + 1]) j = ne[j];
if (p[i] == p[j + 1])j++;
ne[i] = j;
}
}
int main() {
// 创建一个随机数引擎,可以选择不同的引擎,比如 mt19937
std::random_device rd;
std::mt19937 gen(rd());
// 定义一个整数分布,指定随机数范围
std::uniform_int_distribution<> dis(97, 98); // 生成 97 到 98 之间的随机整数,对应a、b
std::uniform_int_distribution<> l(10, 50); // 生成 10 到 50 之间的随机整数
int cnt = 9;
while (cnt--) { // 生成随机数
int len = l(gen);
cout << len << endl;
for (int i = 1; i <= len; ++i) {
int e = dis(gen);
p[i] = char(e);
}
initNe();
for (int i = 1; i <= strlen(p + 1); i++) {
cout << p[i] << " ";
}
cout << endl;
for (int i = 1; i <= strlen(p + 1); i++) {
cout << ne[i] << " ";
}
cout << endl;
cout << endl;
memset(p, 0, N);
memset(ne, 0, N);
}
return 0;
}