Pagini recente » Cod sursa (job #2651789) | Cod sursa (job #2919425) | Cod sursa (job #2144634) | Cod sursa (job #547254) | Cod sursa (job #2579328)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
class Node {
public:
int val, cnt;
Node *nxt[26];
Node() {
val = cnt = 0;
memset(nxt, 0, sizeof(nxt));
}
};
class Trie {
public:
Node *root;
Trie() {
root = new Node();
}
void Insert(string s) {
Node *curr = root;
for(int i = 0; i < s.size(); ++i) {
char c = s[i] - 'a';
if(curr->nxt[c] == 0) {
++curr->cnt;
curr->nxt[c] = new Node();
}
curr = curr->nxt[c];
if(i == s.size() - 1) {
++curr->val;
}
}
}
void Delete(string s) {
Node *curr = root;
Node *arr[30];
arr[0] = root;
for(int i = 0; i < s.size(); ++i) {
char c = s[i] - 'a';
curr = curr->nxt[c];
arr[i + 1] = curr;
}
for(int i = s.size() - 1; i >= 0; --i) {
Node *curr = arr[i + 1];
if(curr->cnt == 0 && curr->val <= 1) {
--arr[i]->cnt;
arr[i]->nxt[s[i] - 'a'] = 0;
delete curr;
}
}
}
int CntAp(string s) {
Node *curr = root;
for(int i = 0; i < s.size(); ++i) {
char c = s[i] - 'a';
curr = curr->nxt[c];
if(i == s.size() - 1) {
return curr->val;
}
}
return 0;
}
int Prefix(string s) {
int best = 0;
Node *curr = root;
for(int i = 0; i < s.size(); ++i) {
char c = s[i] - 'a';
if(curr->nxt[c] == 0) break;
curr = curr->nxt[c];
best = max(best, i + 1);
if(i == s.size() - 1 && curr->val > 1) {
return (int)s.size();
}
}
return best;
}
};
int main() {
int op;
string s;
Trie trie;
while(fin >> op >> s) {
if(op == 0) {
trie.Insert(s);
}
}
return 0;
}