我暴力哈希都过了(大雾
using ull = unsigned long long;
ull h[N], bit[N];
string acr[N];
const ull bas = 13331;
ull gethash(int l, int r) {
return h[r] - h[l - 1] * bit[r - l + 1];
}
__gnu_pbds::gp_hash_table<ull, int> mp;
bool box[N];
void solveqwq() {
int n, q, ss = 0;
cin >> q;
for (int i = 1; i <= q; ++i)
cin >> acr[i];
string s;
cin >> s;
n = s.size();
s = ' ' + s;
bit[0] = 1;
for (int i = 1; i < N; ++i)
bit[i] = bit[i - 1] * bas;
for (int i = 1; i <= n; ++i)
h[i] = h[i - 1] * bas + s[i];
for (int i = 1; i <= q; ++i) {
string t = acr[i];
ull tmp = 0;
for (auto &x : t)
tmp = tmp * bas + x;
if (box[t.size()])
ss += mp[tmp];
else {
box[t.size()] = 1;
for (int i = 1, j = t.size(); j <= n; ++i, ++j)
mp[gethash(i, j)] = 1;
ss += mp[tmp];
}
}
printf("%lld\n", ss);
}