structtrie { int nex[100000][26], cnt; bool exist[100000]; // 该结点结尾的字符串是否存在
voidinsert(char *s, int len){ // 插入字符串 int p = 0; // Trie的根节点(这里为0) for (int i = 0; i < len; i++) { int c = s[i] - 'a'; if (!nex[p][c]) nex[p][c] = ++cnt; // 如果没有,就添加结点 p = nex[p][c]; } exist[p] = true; }
boolfind(char *s, int len){ // 查找字符串 int p = 0; // Trie的根节点(这里为0) for (int i = 0; i < len; i++) { int c = s[i] - 'a'; if (!nex[p][c]) return0; p = nex[p][c]; } return exist[p]; } };
#include<cstdio> usingnamespace std; constexprint N = 500010;
char s[N]; int n, m, ch[N][26], tag[N], tot = 1;
intmain(){ scanf("%d", &n); //Trie的insert模板 for (int i = 1; i <= n; ++i) { scanf("%s", s + 1); int u = 1; for (int j = 1; s[j]; ++j) { int c = s[j] - 'a'; if (!ch[u][c]) ch[u][c] = ++tot; u = ch[u][c]; } tag[u] = 1; } scanf("%d", &m); while (m--) { scanf("%s", s + 1); int u = 1; for (int j = 1; s[j]; ++j) { int c = s[j] - 'a'; u = ch[u][c]; if (!u) break; } if (tag[u] == 1) { tag[u] = 2; puts("OK"); } elseif (tag[u] == 2) puts("REPEAT"); else puts("WRONG"); } return0; }
#include<bits/stdc++.h> usingnamespace std; structtrie { int nex[100000][26], cnt; int exist[100000]; // 该结点结尾的字符串是否存在
voidinsert(char *s, int len){ // 插入字符串 int p = 0; // Trie的根节点(这里为0) int xxx = 0; for (int i = 0; i < len; i++) { int c = s[i] - 'a'; if (!nex[p][c]) nex[p][c] = ++cnt; // 如果没有, if (exist[p]) xxx++; p = nex[p][c]; } exist[p] = 1 + xxx; }
boolfind(char *s, int len){ // 查找字符串 int p = 0; // Trie的根节点(这里为0) for (int i = 0; i < len; i++) { int c = s[i] - 'a'; if (!nex[p][c]) return0; p = nex[p][c]; } return exist[p]; } }; int n; char ch[205]; trie pwd; intmain(){ cin >> n; for(int i = 1; i <= n; i++) { cin >> ch; pwd.insert(ch, strlen(ch)); } int ans = 0; for(int i = 0; i < 100000; i++) { ans = max(ans, pwd.exist[i]); } cout << ans << endl; return0; }