Cod sursa(job #852058)

Utilizator enedumitruene dumitru enedumitru Data 10 ianuarie 2013 20:11:00
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
using namespace std;
int x,i,k;
char s[21];
struct nod
{      int info,co;
       nod *a[26];
       nod()
       {    info=co=0;
            for(int i=0; i<26; ++i) a[i]=0;
       }
} *p, *q, *inc;
int main ()
{   ifstream f("trie.in"); ofstream g("trie.out");
    inc=new nod();
    inc->co=1;
    while(f>>x>>s)
    {   p=inc;
        if(x==0)
        {   for(i=0; s[i];  ++i)
            {   if(!p->a[s[i]-'a'])
                     {   q=new nod();
                         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
                {   k=0;
                    for(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';
                }
    }
    g.close();
    return 0;
}