如题,这是代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5;//这里改成 const int N = 2e5 就可以过了
const ll Mod = 1e9 + 7, B = 10;
string S, T;
ll hz[N + 10][2], qp[N + 10];
int get(int l, int r, int opt) {
return ((hz[r][opt] - hz[l - 1][opt] * qp[r - l + 1]) % Mod + Mod) % Mod;
}
void geth(string str, int opt) {
for(int i = 1; i < str.size(); i++)
hz[i][opt] = (hz[i - 1][opt] * B + str[i] - 'A' + 1) % Mod;
}
int lcp(int u, int v) {
int l = 1, r = min(T.size() - 1, S.size() - 1), ans = 0;
while(l <= r) {
int mid = (l + r) >> 1;
if(get(u, u + mid - 1, 0) == get(v, v + mid - 1, 1))
ans = mid, l = mid + 1;
else r = mid - 1;
}
return ans;
}
void init() {
cin >> S >> T;
S = "#" + S;
T = "#" + T;
geth(S, 0);
geth(T, 1);
int ans = 0, n1 = S.size() - 1, n2 = T.size() - 1;
for(int i = 1; i <= n1 - n2 + 1; i++) {
int p = i, j = 1;
for(int t = 1; t <= 4; t++) {
int k = lcp(p, j);
p = min(p + k - 1, n1);
j = min(j + k - 1, n2);
if(j == n2) {
ans++;
break;
}
p += 2, j += 2;
}
}
cout << ans << endl;
}
int main() {
qp[0] = 1;
for(int i = 1; i <= N; i++)
qp[i] = qp[i - 1] * B % Mod;
int T; cin >> T;
while(T--) init();
}
不太清楚自己哪里写的不太规范,肯定各位巨佬帮忙斧正 qwq