Cod sursa(job #3298220)

Utilizator Cristina_2006Mitu Cristina-Maria Cristina_2006 Data 28 mai 2025 13:12:16
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");

const  int max_litere=26;
const int max_nod= 200000;
 struct TrieNode{
     int n[max_litere];
     int prefix;
     int nr_word;
     TrieNode (){
         memset(n,0,sizeof(n));
         prefix=0;
         nr_word=0;
     }
 };
 TrieNode trie[max_nod];
 int node_count=1;
 
 void insert(const string& word){
     int node=0;
     for(char c: word){
         int i=c-'a';
         if(trie[node].n[i]==0){
             trie[node].n[i]=node_count++;
         }
         node=trie[node].n[i];
         trie[node].prefix++;
         
     }
     trie[node].nr_word++;
 }
 void erase(const string& word){
     int node=0;
     for(char c: word){
         int i=c-'a';
             node=trie[node].n[i];
         trie[node].prefix--;
     }
    trie[node].nr_word--; 
 }
  int count(const string& word){
     int node=0;
     for(char c: word){
         int i=c-'a';
         if(trie[node].n[i]==0){
            return 0;
         }
         node=trie[node].n[i];
     }
   return trie[node].nr_word;
  }
  
  int Prefix(const string& word){
      int node=0;
      int l=0;
     for(char c: word){
         int i=c-'a';
         if(trie[node].n[i]==0 || trie[trie[node].n[i]].prefix==0){
             break;
         }
         node=trie[node].n[i];
         l++;
         
     }
    return l;
  }
  int main(){
      int t;
      string word;
      while(fin>>t>>word){
          if(t==0) insert(word);
          else if(t==1) erase(word);
               else if(t==2) fout<<count(word)<<endl;
                    else if(t==3) fout<<Prefix(word)<<endl;
      }
  }