/* code by PixelCat */
/* meow owo */
#include <bits/stdc++.h>
#define int LL //__int128
#define double long double
using namespace std;
using LL = long long;
// using i128 = __int128_t;
using ull = unsigned long long;
using pii = pair<int, int>;
#define For(i, a, b) for (int i = a; i <= b; i++)
#define Fors(i, a, b, s) for (int i = a; i <= b; i += s)
#define Forr(i, a, b) for (int i = a; i >= b; i--)
#define F first
#define S second
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define sz(x) ((int)x.size())
#define mkp make_pair
#define MOD (int)(998244353)
// #define MOD (int)((LL)1'000'000'007)
#define INF (int)(4e18)
#define EPS (1e-6)
namespace PixelCat {
#ifdef NYAOWO
#include "/home/pixelcat/yodayo/meow/library/debug.hpp"
inline void USACO(const string &s) {
cerr << "USACO: " << s << "\n";
}
#else
#define debug(...)
inline void timer() {}
inline void USACO(const string &s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
#endif
inline void NYA() {
ios::sync_with_stdio(false);
cin.tie(0);
}
inline int gcd(int a, int b) {
return __gcd(a, b);
}
inline int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
int fpow(int b, int p, const int &mod = MOD) {
int ans = 1;
for (; p; p >>= 1, b = b * b % mod)
if (p & 1) ans = ans * b % mod;
return ans;
}
template <typename T>
inline void chmin(T &_a, const T &_b) {
if (_b < _a) _a = _b;
}
template <typename T>
inline void chmax(T &_a, const T &_b) {
if (_b > _a) _a = _b;
}
mt19937_64 rng(
chrono::steady_clock::now().time_since_epoch().count());
} // namespace PixelCat
using namespace PixelCat;
const int MAXN = 100010; // N, Q
const int MAXS = 2000010; // total # of characters
using nodeid = int32_t;
struct Trie {
nodeid cur_node, rt;
int32_t dfs_time;
nodeid nxt[MAXS][26];
int32_t l[MAXS];
int32_t r[MAXS];
vector<nodeid> end_node;
nodeid new_node() {
cur_node++;
memset(nxt[cur_node], 0, sizeof(nxt[cur_node]));
l[cur_node] = 0;
r[cur_node] = -1;
return cur_node;
}
void init() {
cur_node = 0;
rt = new_node();
}
void insert(const string &s) {
int nd = rt;
for(const char &ch:s) {
nodeid &nnd = nxt[nd][ch - 'A'];
if(!nnd) nnd = new_node();
nd = nnd;
}
end_node.eb(nd);
r[nd]++;
}
void _dfs(int nd) {
l[nd] += dfs_time;
r[nd] += dfs_time;
dfs_time = r[nd] + 1;
For(ch, 0, 25) {
nodeid nnd = nxt[nd][ch];
if(nnd) {
_dfs(nnd);
r[nd] = r[nnd];
}
}
}
void build(int* pos) {
dfs_time = 1;
_dfs(rt);
For(i, 0, sz(end_node) - 1) {
nodeid nd = end_node[i];
pos[i + 1] = l[nd];
}
}
pii find(const string &s) {
int nd = rt;
for(const char &ch:s) {
nodeid &nnd = nxt[nd][ch - 'A'];
if(!nnd) return pii(-1, -1);
nd = nnd;
}
return pii(l[nd], r[nd]);
}
} tt, tr;
// struct BIT {
// void init(int n);
// void add(int i, int x);
// int ask(int i);
// int ask(int l, int r);
// } bit;
struct SweepingLine {
vector<pii> pt;
int ans[MAXN];
void init() {
memset(ans, -1, sizeof(ans));
}
void add_pt(int x, int y) {
pt.eb(x, y);
}
void add_qry(int id, pii x, pii y) {
int cnt = 0;
for(auto &i:pt) {
if(x.F <= i.F && i.F <= x.S &&
y.F <= i.S && i.S <= y.S) {
cnt++;
}
}
ans[id] = cnt;
}
void solve(int n, int* res) {
For(i, 1, n) if(ans[i] >= 0) res[i] = ans[i];
}
} swp;
int posx[MAXN];
int posy[MAXN];
int ans[MAXN];
int32_t main() {
NYA();
// nyaacho >/////<
int n, q; cin >> n >> q;
tt.init();
tr.init();
For(i, 1, n) {
string s; cin >> s;
tt.insert(s);
reverse(all(s));
tr.insert(s);
}
tt.build(posx);
tr.build(posy);
swp.init();
For(i, 1, n) {
swp.add_pt(posx[i], posy[i]);
}
For(i, 1, q) {
string sx, sy;
cin >> sx >> sy;
pii px = tt.find(sx);
reverse(all(sy));
pii py = tr.find(sy);
if(px.F < 0 || py.F < 0) {
ans[i] = 0;
} else {
swp.add_qry(i, px, py);
}
}
swp.solve(q, ans);
For(i, 1, q) {
cout << ans[i] << "\n";
}
return 0;
}
/*
2 3
AUGC
AGC
G C
AU C
A C
=> 0 1 2
3 3
AA
AA
AGA
AA AA
AG GA
AG GA
=> 2 1 1
8 7
GCGCUACCCCAACACAAGGCAAGAUAUA
G
GGAC
GCGG
U
GCGCUACCCCAACACAAGGCAAGAUGGUC
GCCG
GCGCUGA
GCGCUACCC A
GCGCUACCCC AC
GCG C
GCGC A
G G
G C
G GGA
=> 1 0 1 2 3 2 0
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1108 KB |
Output is correct |
2 |
Correct |
1 ms |
1108 KB |
Output is correct |
3 |
Correct |
1 ms |
1108 KB |
Output is correct |
4 |
Correct |
1 ms |
1120 KB |
Output is correct |
5 |
Correct |
1 ms |
1108 KB |
Output is correct |
6 |
Correct |
1 ms |
1108 KB |
Output is correct |
7 |
Correct |
2 ms |
1108 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
310 ms |
217416 KB |
Output is correct |
2 |
Correct |
397 ms |
206172 KB |
Output is correct |
3 |
Correct |
353 ms |
218268 KB |
Output is correct |
4 |
Correct |
383 ms |
208060 KB |
Output is correct |
5 |
Correct |
409 ms |
270524 KB |
Output is correct |
6 |
Correct |
460 ms |
274528 KB |
Output is correct |
7 |
Correct |
51 ms |
7080 KB |
Output is correct |
8 |
Correct |
318 ms |
163796 KB |
Output is correct |
9 |
Correct |
274 ms |
138444 KB |
Output is correct |
10 |
Correct |
185 ms |
132260 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1540 ms |
3532 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1108 KB |
Output is correct |
2 |
Correct |
1 ms |
1108 KB |
Output is correct |
3 |
Correct |
1 ms |
1108 KB |
Output is correct |
4 |
Correct |
1 ms |
1120 KB |
Output is correct |
5 |
Correct |
1 ms |
1108 KB |
Output is correct |
6 |
Correct |
1 ms |
1108 KB |
Output is correct |
7 |
Correct |
2 ms |
1108 KB |
Output is correct |
8 |
Correct |
310 ms |
217416 KB |
Output is correct |
9 |
Correct |
397 ms |
206172 KB |
Output is correct |
10 |
Correct |
353 ms |
218268 KB |
Output is correct |
11 |
Correct |
383 ms |
208060 KB |
Output is correct |
12 |
Correct |
409 ms |
270524 KB |
Output is correct |
13 |
Correct |
460 ms |
274528 KB |
Output is correct |
14 |
Correct |
51 ms |
7080 KB |
Output is correct |
15 |
Correct |
318 ms |
163796 KB |
Output is correct |
16 |
Correct |
274 ms |
138444 KB |
Output is correct |
17 |
Correct |
185 ms |
132260 KB |
Output is correct |
18 |
Execution timed out |
1540 ms |
3532 KB |
Time limit exceeded |
19 |
Halted |
0 ms |
0 KB |
- |