Pagini recente » Cod sursa (job #1089071) | Cod sursa (job #888170) | Cod sursa (job #2176541) | Cod sursa (job #1104650) | Cod sursa (job #2741938)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trieNode
{
trieNode *children[26];
int cnt, pref;
};
trieNode *root;
void init(trieNode *p)
{
int i;
for(i=0; i<26; i++)
p->children[i]=NULL;
p->cnt=0;
p->pref=0;
}
void insertKey(char s[25], int val)
{
int i, l=strlen(s);
trieNode *p=root;
for(i=0; i<l; i++)
{
if(p->children[s[i]-'a']==NULL)
{
trieNode *q = new trieNode;
init(q);
p->children[s[i]-'a']=q;
}
p=p->children[s[i]-'a'];
p->pref+=val;
if(i==l-1)
p->cnt+=val;
}
}
int searchKey(char s[25])
{
int i, l=strlen(s);
trieNode *p=root;
for(i=0; i<l; i++)
{
p=p->children[s[i]-'a'];
if(p==NULL)
return 0;
}
return p->cnt;
}
int longestCommonPrefix(char s[25])
{
int i, l=strlen(s);
trieNode *p=root;
int ans=1;
for(i=0; i<l; i++)
{
p=p->children[s[i]-'a'];
if(p->pref==1)
return ans;
if(i<l-1)
ans++;
else if(p->pref>1)
ans++;
}
return ans;
}
int main()
{
int op;
char s[25];
root = new trieNode;
init(root);
while(fin >> op >> s)
{
if(op==0)
insertKey(s, 1);
else if(op==1)
insertKey(s, -1);
else if(op==2)
fout << searchKey(s) << '\n';
else
fout << -1 << '\n';
}
return 0;
}