Cod sursa(job #2011357)

Utilizator geo_furduifurdui geo geo_furdui Data 15 august 2017 21:33:06
Problema Trie Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include<cstring>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
int p,frecv[200010][30],noade,number[200100],obvious[200100],nr; char s[500];
void add (int poz,int varf)
{   int h=frecv[varf][s[poz]-'a'];
    if(h!=0)
    {obvious[h]++;
        if(poz==strlen(s)-1) {number[h]++; return;} else
        add(poz+1,h);
    }
    else
    {
        noade++;
        obvious[noade]++;
        frecv[varf][s[poz]-'a']=noade;
        if(poz==strlen(s)-1) {number[noade]++; return;} else
        add(poz+1,noade);
    }
}
void spulber (int poz,int varf)
{  obvious[varf]--;
   if(poz==strlen(s)) number[varf]--; else
    {
        int h=frecv[varf][s[poz]-'a'];
        spulber(poz+1,h);
    }
}
void tipar (int poz,int varf)
{   if(poz==strlen(s)) cout<<number[varf]<<"\n"; else
    {
        int h=frecv[varf][s[poz]-'a'];
        if(h==0) {cout<<0<<"\n"; return;}
        tipar(poz+1,h);
    }
}
void scrie (int poz,int varf)
{
    int h=frecv[varf][s[poz]-'a'];
    if(h==0 || obvious[h]==0 || poz==strlen(s)-1) cout<<poz<<"\n";
    else scrie(poz+1,h);
}
void bla ()
{

}
void corso ()
{
    while(cin>>p)
    {
        cin>>s; nr++;
        if(nr==3095) bla();
        if(p==0) add(0,0);
        else if(p==1) spulber(0,0);
        else if(p==2) tipar(0,0);
        else if(p==3) scrie(0,0);
    }
}
int main()
{
    corso();
    cin.close();
    cout.close();
    return 0;
}