第13次提交终于0->100的原因居然是——没有判重???!

https://www.luogu.org/problem/P3879算是道略显恶心的板子题吧,唯一一点以后可以继承的经验是trie数组利用了结构体+vector的方式解决了空间与维度的问题。
1 #include<iostream>
2 #include<cstdio>
3 #include<vector>
4 #include<cstring>
5 using namespace std;
6
7 struct Node{
8 int a[26];
9 Node(){memset(a,0,sizeof a);}
10 int& operator [](int x){return a[x];}
11 }zero;
12
13 string s;
14 vector<Node> trie;
15 vector<int> cntw[500010];
16
17 void add(int i){
18 int p = 0;
19 for(int j = 0;j < s.size();j++){
20 int ne = s[j]-'a';
21 if(!trie[p][ne]){
22 trie[p][ne] = trie.size();
23 trie.push_back(zero);
24 }
25 p = trie[p][ne];
26 }
27 if(cntw[p].empty()||cntw[p].size()&&i^cntw[p][cntw[p].size()-1])
28 cntw[p].push_back(i);
29 }
30
31 void work(){
32 int flag = 1,p = 0;
33 for(int i = 0;i < s.size();++i){
34 int ne = s[i]-'a';
35 if(!trie[p][ne]){flag = 0;break;}
36 p = trie[p][ne];
37 }
38 if(flag)for(int i = 0;i < cntw[p].size();++i)
39 printf("%d ",cntw[p][i]);
40 putchar('\n');
41 }
42
43 int n,m;
44
45 int main(){
46 trie.push_back(zero);
47 cin >> n;
48 for(int i = 1;i <= n;i++){
49 int x;cin >> x;
50 for(int j = 1;j <= x;j++){
51 cin >> s;
52 add(i);
53 }
54 }
55 cin >> m;
56 for(int i = 1;i <= m;i++){
57 cin >> s;
58 work();
59 }
60 return 0;
61 }