Cod sursa(job #2137397)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 20 februarie 2018 19:30:45
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct node{
    int term,cuv;
    node* next[26];
};
node *root;
void init(node *it)
{
    for(char i=0;i<26;i++)
        it->next[i]=0;
    it->term=0;
}
void add(char *sir)
{
    int n=strlen(sir);
    node *it;
    it=root;
    for(int i=0;i<n;i++)
    {
        if(!it->next[sir[i]-'a'])
        {
            it->next[sir[i]-'a']=new node;
            init(it->next[sir[i]-'a']);
        }
        it->term++;
        it=it->next[sir[i]-'a'];
    }
    it->cuv+=;
}
void del(char *sir)
{
    node *it;
    it=root;
    while(*sir!=0)
    {
        it=it->next[*sir-'a'];
        it->term--;
        sir++;
    }
}
int apar(char *sir)
{
    int n=strlen(sir);
    node *it=root;
    for(int i=0;i<n;i++)
    {
        if(it->next[sir[i]-'a'])
            it=it->next[sir[i]-'a'];
        else return 0;
    }
    return it->cuv;
}
int prefix(char *sir)
{
    node *it=root;
    if(root->term==0)
        return 0;
    int n=strlen(sir),i;
    for(i=0;i<n;i++)
    {
        if(it->term==0)
            return i-1;
        if(it->next[sir[i]-'a'])
            it=it->next[sir[i]-'a'];
        else
            return i;
    }
    return n;
}
int main()
{
    int op;
    char sir[25];
    root=new node;
    init(root);
    while(f>>op)
    {
        f>>sir;
        if(op==0)
        {
            add(sir);
        }
        if(op==1)
        {
            del(sir);
        }
        if(op==2)
        {
            g<<apar(sir)<<'\n';
        }
        if(op==3)
        {
            g<<prefix(sir)<<'\n';
        }
    }
    return 0;
}