Mai intai trebuie sa te autentifici.
Cod sursa(job #2313622)
Utilizator | Data | 7 ianuarie 2019 11:20:48 | |
---|---|---|---|
Problema | Trie | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.44 kb |
#include<algorithm>
#include<fstream>
using namespace std;
int x,i,k;
char s[26];
struct O
{
int info,co;
O *a[26];
O()
{
int i;
for(info=co=i=0;i<26;i++)
a[i]=0;
}
}*p,*q,*r;
int main()
{
ifstream f("trie.in");
ofstream g("trie.out");
r=new O();
r->co=1;
while(f>>x>>s)
{
p=r;
if(x==0)
{
for(i=0;s[i];i++)
{
if(!p->a[s[i]-'a'])
{
q=new O();
p->a[s[i]-'a']=q;
p=q;
}
else
p=p->a[s[i]-'a'];
p->co++;
}
p->info++;
}
else if(x==1)
{
for(i=0;s[i];i++)
{
p=p->a[s[i]-'a'];
p->co--;
}
p->info--;
}
else if(x==2)
{
for(i=0;s[i];i++)
if(p->a[s[i]-'a'])
p=p->a[s[i]-'a'];
else
break;
if(!s[i])
g<<(p->info)<<'\n';
else
g<<0<<'\n';
}
else
{
for(k=i=0;s[i];i++)
if(p->a[s[i]-'a']&&p->co)
p=p->a[s[i]-'a'];
else
break;
if(!p->co)
i--;
g<<i<<'\n';
}
}
}