Pagini recente » Cod sursa (job #1483879) | Cod sursa (job #71468) | Cod sursa (job #2540324) | Cod sursa (job #2703825) | Cod sursa (job #2287463)
#include <bits/stdc++.h>
using namespace std;
struct trie
{
struct trie *copil[30];
int eow;
int rang;
};
struct trie *creaza(void)
{
struct trie *tnode=new trie;
tnode->rang=0;
tnode->eow=0;
for (int i=0;i<=27;i++)
tnode->copil[i]=NULL;
};
void insert(string s,trie *curent)
{
for (int i=0;i<s.size();i++)
{
int n=s[i]-'a';
if (!curent->copil[n])
curent->copil[n]=creaza();
curent->rang++;
curent=curent->copil[n];
}
curent->eow++;
}
int apare(string s,trie *curent)
{
for (int i=0;i<s.size();i++)
{
int n=s[i]-'a';
if (!curent->copil[n])
return 0;
curent=curent->copil[n];
}
return curent->eow;
}
int pref(string s,trie *curent)
{
for (int i=0;i<s.size();i++)
{
int n=s[i]-'a';
if (!curent->copil[n])
return i;
curent=curent->copil[n];
}
return s.size();
}
bool sterge(string s,int l,struct trie *nod)
{
if (l==s.size())
{
nod->eow--;
if (nod->rang) return 0; else return 1;
}
int n=s[l]-'a';
if (sterge(s,l+1,nod->copil[n]))
{
nod->copil[n]=NULL;
if (nod->eow) {nod->rang--; return 0;}
if (nod->rang>1) {nod->rang--; return 0;}
return 1;
}
}
ifstream fin("trie.in");
ofstream fout("trie.out");
int i,j,m,n,a,b;
string s;
trie *root=creaza();
int main()
{
while (!fin.eof())
{
fin>>i>>s;
if (fin.eof()) break;
if (i==0) insert(s,root);
if (i==1) b=sterge(s,0,root);
//if (i==2) fout<<apare(s,root)<<"\n";
//if (i==3) fout<<pref(s,root)<<"\n";
}
return 0;
}