Cod sursa(job #882973)

Utilizator StanAndreiAndrei Stan StanAndrei Data 19 februarie 2013 16:52:18
Problema Trie Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.8 kb
#include <fstream>
#include <string.h>
#include <iostream>

using namespace std;

ifstream f1("trie.in");
ofstream f2("trie.out");

char a[10005][35];
int N=0,LEN[10005];
char L[35];

void adauga(char l[35])
{
  //  cout<<l<<endl;
    int i,j,len,c;
    len=strlen(l);
    N++;
    LEN[N]=len-2;
    j=1;
    for (c=2;c<=len;c++)
        a[N][j++]=l[c];
}

void sterge(char l[35])
{
  //  cout<<l<<endl;
    int i,j,len;
    len=strlen(l);
    int ok;

    for (i=1;i<=N;i++)
        if (LEN[i]==(len-2))
        {
            ok=1;
            for (j=1;j<=LEN[i];j++)
               if (a[i][j]!=l[j+1])
                   ok=0,j=LEN[i]+1;
            if (ok==1)
                LEN[i]=0,i=N+1;
        }
}

void aparitii(char l[35])
{
  //  cout<<l<<endl;
    int i,j,len,nr=0;
    len=strlen(l);
    int ok;

    for (i=1;i<=N;i++)
        if (LEN[i]==(len-2))
        {
            ok=1;
            for (j=1;j<=LEN[i];j++)
               if (a[i][j]!=l[j+1])
                   ok=0,j=LEN[i]+1;
            if (ok==1)
                nr++;
        }
    f2<<nr<<'\n';
}

void prefix(char l[35])
{
    int i,j,len,max=0,nr;
    len=strlen(l);

    for (i=1;i<=N;i++)
    {
        nr=0;
        for (j=1;j<=LEN[i];j++)
            if (a[i][j]!=l[j+1])
                j=LEN[i]+1;
            else
                nr++;
        if (nr>max)
            max=nr;
    }

    f2<<max<<'\n';
}

int main()
{
    while (!f1.eof())
    {
        f1.getline(L,35);
        if (L[0]=='0')
            adauga(L);
        if (L[0]=='1')
            sterge(L);
        if (L[0]=='2')
            aparitii(L);
        if (L[0]=='3')
            prefix(L);
        //afislista();
    }
    //afislista();
    f1.close();
    f2.close();
    return 0;
}