https://nanti.jisuanke.com/t/41386
给你一个字符串 再给你n个字符串 查询是否是字串 一道裸的KMP 用了Kuangbin的板子 很基础
#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<cstring>
#include <unordered_set>
#include <bitset>
using namespace std;
const int maxn = 1e5 + 5;
string t;
string s;
int nxt[maxn];
void prekmp(string x) {
memset(nxt, 0, sizeof(nxt));
int i, j;
j = nxt[0] = -1;
i = 0;
int m = x.length();
while (i < m) {
while (-1 != j && x[i] != x[j])j = nxt[j];
nxt[++i] = ++j;
}
}
int kmp(string x, string y) {//x是模式串 y是主串
int i, j;
int ans=0;
prekmp(x);
int m = x.length();
int n = y.length();
i = j = 0;
while (i < n) {
while (-1 != j && y[i] != x[j]) j = nxt[j];
i++; j++;
if (j >= m) {
ans = 1;
break;
}
}
return ans;
}
int main() {
cin >> t;
int q;
cin >> q;
while (q--) {
cin >> s;
if (t.length() > s.length()) {
if (kmp(s, t)) cout << "my child!\n";
else cout << "oh, child!\n";
}
else if (t.length() < s.length()) {
if (kmp(t, s)) cout << "my teacher!\n";
else cout << "senior!\n";
}
else {
if (s == t) cout << "jntm!\n";
else cout << "friend!\n";
}
}
return 0;
}







Comments | NOTHING