UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#200493#2422. 名字Anonyme100335ms24968kbC++111.9kb2024-01-04 09:28:502024-01-04 12:06:11

answer

#include <bits/stdc++.h>
using namespace std;

#define QwQ330AwA return 0
#define ll long long

const int N = 1e5 + 5;
int n, m;
string s[N];
struct Tree {
	int fail;
	int ch[26];
} t[N];
int tot;
int ed[N];
int ins(string s) {
	int u = 0;
	for (auto x : s) {
		if (!t[u].ch[x - 'a']) t[u].ch[x - 'a'] = ++tot;
		u = t[u].ch[x - 'a'];
	}
	return u;
}

void build() {
	queue <int> q;
	int u = 0;
	for (int i = 0; i < 26; i++) {
		if (t[u].ch[i]) {
			q.push(t[u].ch[i]);
			t[t[u].ch[i]].fail = 0;
		}
	}
	while (!q.empty()) {
		u = q.front();
		q.pop();
		for (int i = 0; i < 26; i++) {
			if (t[u].ch[i]) {
				q.push(t[u].ch[i]);
				t[t[u].ch[i]].fail = t[t[u].fail].ch[i];
			} else t[u].ch[i] = t[t[u].fail].ch[i];
		}
	}
}

vector <int> e[N];
int L[N], R[N], tim;
void dfs(int u) {
	L[u] = ++tim;
	for (auto v : e[u]) dfs(v);
	R[u] = tim;
}
vector < pair <int, int> > add[N], del[N];
int ans[N];
int tr[N];
void upd(int x) {
	for (; x <= tot + 1; x += x & (-x)) tr[x]++;
}
int query(int x) {
	int res = 0;
	for (; x; x -= x & (-x)) res += tr[x];
	return res;
}
int query(int l, int r) {
	return query(r) - query(l - 1);
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> s[i], ed[i] = ins(s[i]);
	build();
	for (int i = 1; i <= tot; i++) e[t[i].fail].push_back(i);
	dfs(0);
	for (int i = 1; i <= m; i++) {
		int l, r, k;
		cin >> l >> r >> k;
		del[l - 1].push_back({k, i});
		add[r].push_back({k, i});
	}
	for (int i = 1; i <= n; i++) {
		int u = 0;
		for (auto x : s[i]) {
			u = t[u].ch[x - 'a'];
			upd(L[u]);
		}
		for (auto qwq : del[i]) ans[qwq.second] -= query(L[ed[qwq.first]], R[ed[qwq.first]]);
		for (auto qwq : add[i]) ans[qwq.second] += query(L[ed[qwq.first]], R[ed[qwq.first]]);		
	}
	for (int i = 1; i <= m; i++) cout << ans[i] << '\n';
	QwQ330AwA;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 9132kb

input:

10 100
bc
a
aaa
aaaccaaaca
caaabacbcaaaaccaaaaaccaaacaccaaaa
aaabacacbccbccaaabacbc
accaaaa
aaaccaaa...

output:

12
0
1
48
7
0
56
1
15
3
1
1
49
46
11
18
4
5
13
45
1
4
32
18
1
1
7
10
0
18
1
5
1
1
1
4
53
55
1
24
4
1...

result:

ok 100 lines

Test #2:

score: 10
Accepted
time: 3ms
memory: 9136kb

input:

5 100
ejmljknnjeldejmljknje
ldejmljknnjeldejmljknnjfldejmlj
jmkjknjeld
fldejmljknnjeldejmljknjeldejm...

output:

6
5
1
7
10
5
8
2
6
6
3
8
4
5
4
1
5
4
9
5
7
3
6
5
4
9
5
4
5
3
5
9
9
8
10
5
1
4
3
2
8
4
4
1
1
8
7
5
4
...

result:

ok 100 lines

Test #3:

score: 10
Accepted
time: 0ms
memory: 9256kb

input:

50 1000
aaacaaaabaaaaaaa
a
aaaacaaaabaaaaaaaabaaaa
aaaaaaaaacaaaabaaaaaaaabaaaaaaaaaaa
acbbaaabacaaa...

output:

129
77
0
21
274
11
72
109
26
7
284
18
173
19
349
8
15
5
27
6
51
311
39
371
1
3
44
6
12
492
323
346
3...

result:

ok 1000 lines

Test #4:

score: 10
Accepted
time: 3ms
memory: 9260kb

input:

30 1000
mgenjcfodhnmgenjcfodhnm
genjcfodhnmgenjcfodhnmgenjcfodhnmenjcfodhnmgenjcfodhnmenjcfodhnmgenj...

output:

23
10
77
28
11
25
40
8
56
41
15
0
2
39
2
52
79
4
60
4
10
40
20
84
82
8
0
4
42
24
6
68
23
3
7
10
77
4...

result:

ok 1000 lines

Test #5:

score: 10
Accepted
time: 49ms
memory: 19936kb

input:

500 100000
bcabcbbbcacaabccbccacaccbcacbccccbbaaabbabcbcccaababccbcabcbbbcacaabccbccacaccbcacb
cccbb...

output:

14
3954
226
633
528
2614
257
53
440
148
2144
768
268
17
284
185
234
30
481
495
202
0
1338
1694
4910
...

result:

ok 100000 lines

Test #6:

score: 10
Accepted
time: 57ms
memory: 21520kb

input:

500 100000
ehecbhadefejeehecehecbhadefejeehecehecbhadefejeehecehecbhadefejeehecehecbhadefejeehecehec...

output:

251
669
335
2013
1080
23
196
450
4697
1291
35
32
1332
9
45
877
723
1340
327
138
225
218
376
194
48
1...

result:

ok 100000 lines

Test #7:

score: 10
Accepted
time: 66ms
memory: 24208kb

input:

200 100000
cefdicgefchdcbbfabajbdhcga
efchcgacfahcgacfaaicfbhihciadedhacafcefdicgefchcgacfahcgacfaai...

output:

6
150
1
380
125
482
75
560
7
180
13
0
134
41
5
599
299
6
23
108
0
171
212
220
39
136
9
62
100
132
8
...

result:

ok 100000 lines

Test #8:

score: 10
Accepted
time: 44ms
memory: 21248kb

input:

500 100000
qhyovpqmdmxzpedsswqrydaogpfjitkxfowgmxglflchcnxzjkcfqhylvpqmdmxzpedsswqrydaogpfjitkxfowgm...

output:

206
393
721
78
191
1162
84
3302
1404
918
31
57
62
234
27
150
2744
1260
88
71
193
208
1437
853
2093
4...

result:

ok 100000 lines

Test #9:

score: 10
Accepted
time: 58ms
memory: 24968kb

input:

200 100000
jjidrjrmjjhkrxsraaaqduplrcznisidrjrmjjidxjrmjjrxsraaaqaaqduslrcznisidrjrmjjidrjrmjjhkrxsr...

output:

6
390
975
291
3
136
6
264
160
125
98
1794
1
17
493
0
2
310
40
1589
11
3
81
146
13
450
5
216
11
66
43...

result:

ok 100000 lines

Test #10:

score: 10
Accepted
time: 55ms
memory: 18704kb

input:

1000 100000
cbabbcbbbbcbbbccacbabbcbbbbcbbbccacbabbcbbbbcbbbccacbabbcbbbbcbbbccacbabbcbb
bccacb
babb...

output:

23
3036
159
187
11472
909
2
257
173
96
1070
21215
459
920
2680
7901
17396
513
3992
1460
31684
4245
2...

result:

ok 100000 lines

Extra Test:

score: 0
Extra Test Passed