Mai intai trebuie sa te autentifici.
Cod sursa(job #1697937)
| Utilizator | Data | 3 mai 2016 12:39:21 | |
|---|---|---|---|
| Problema | Trie | Scor | 50 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.45 kb |
#include <fstream>
#include <string.h>
#define cuv(x) (x-'a')
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct Trie
{
int prefix=0;
int cuvant=0;
Trie *next[27];
}*T;
char s[1000];
int n;
int pref;
void ins(int pos, Trie *T)
{
if(T->next[cuv(s[pos])]==NULL)
T->next[cuv(s[pos])]=new Trie;
T=T->next[cuv(s[pos])];
T->prefix++;
if(pos==n-1)
T->cuvant++;
else
ins(pos+1,T);
}
void del(int pos, Trie *T)
{
T=T->next[cuv(s[pos])];
T->prefix--;
if(pos==n-1)
T->cuvant--;
else
del(pos+1,T);
}
int words(int pos, Trie *T)
{
if(T->next[cuv(s[pos])]==NULL)
return 0;
T=T->next[cuv(s[pos])];
if(pos==n-1)
return T->cuvant;
else
return words(pos+1,T);
}
void maxPrefix(int pos, Trie *T)
{
if(T->next[cuv(s[pos])]==NULL)
return;
T=T->next[cuv(s[pos])];
if(T->prefix>=1)
pref++;
if(pos!=n-1)
maxPrefix(pos+1,T);
}
int main()
{
T=new Trie;
int x;
while(in>>x>>s)
{
n=strlen(s);
if(x==0)
ins(0,T);
else if(x==1)
del(0,T);
else if(x==2)
out<<words(0,T)<<endl;
else
{
pref=0;
maxPrefix(0,T);
out<<pref<<endl;
}
}
in.close();
out.close();
return 0;
}
