Pagini recente » Cod sursa (job #130971) | Cod sursa (job #2823477) | Istoria paginii runda/delay/clasament | Cod sursa (job #2053921) | Cod sursa (job #1279985)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
int fin,ap;
trie * fiu[30];
trie()
{
for(int i=1;i<=27;i++)
fiu[i]=NULL;
fin=0; ap=0;
}
} ;
trie rad , * act ;
int tip; char s[25];
void Change(char sir[25],int val)
{ int i,len=strlen(sir),x;
act=&rad;
for(i=0;i<len;i++)
{ x=sir[i]-96;
if (act->fiu[x]==NULL) act->fiu[x]= new trie;
act=act->fiu[x];
act->ap+=val;
}
act->fin+=val;
}
int Count(char sir[25])
{ int i,len=strlen(sir),x;
act=&rad;
for(i=0;i<len;i++)
{ x=sir[i]-96;
if (act->fiu[x]==NULL) return 0;
act=act->fiu[x];
}
return act->fin;
}
int Prefix(char sir[25])
{ int i,len=strlen(sir),x;
act=&rad;
for(i=0;i<len;i++)
{ x=sir[i]-96;
if (act->fiu[x]==NULL) return i;
act=act->fiu[x];
if (act->ap==0) return i;
}
return len;
}
int main ()
{
while(f>>tip>>s)
{
if (tip==0) Change(s,1);
if (tip==1) Change(s,-1);
if (tip==2) g<<Count(s)<<"\n";
if (tip==3) g<<Prefix(s)<<"\n";
}
return 0;
}