Cod sursa(job #3242107)

Utilizator RosheRadutu Robert Roshe Data 9 septembrie 2024 00:23:50
Problema Trie Scor 5
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <list>
#include <fstream>
#include <cstring>
#include <cstdio>

using namespace std;


void printList(list<char*> &l){
  for(auto it = l.begin(); it!=l.end(); it++){
    printf("%s\n", *it);
  }
}


void del(list<char*> &l, char* x){
  for(auto it = l.begin(); it!=l.end(); it++){
    if(strcmp(x, *it) == 0){
      l.erase(it);
      break;
    }
  }
}

void countWord(list<char*> l, char *x){
  int cnt = 0;
  for(auto it = l.begin(); it != l.end(); it++){
    if(strcmp(x, *it) == 0){
       cnt++;
    }
  }
  printf("%d\n", cnt);
//  printf("Number of appereances for word: %s, is : %d\n", x, cnt);
}

void longestPrefix(list<char*> l, char *x){
  int res = 0;
  for(auto it = l.begin(); it != l.end(); it++){
    if(strcmp(x, *it) == 0) continue;
    int tmp = 0;
    for(int i = 0; i<strlen(*it) && i<strlen(x); i++){
      if(x[i] == (*it)[i]) tmp++;
      else break;
    }
    res = tmp > res ? tmp : res;
  }
  printf("%d\n", res);
//  printf("Longest prefix for string: %s, is this many characters: %d\n", x, res);
}



int main(){
  char input[25];
  list<char*> trie;
  freopen("trie.in", "r", stdin);
  freopen("trie.out", "w", stdout);
  while(fgets(input, 25, stdin) != 0){
    switch(input[0]){
    case '0': // insert element in list
      trie.push_back(strdup(input + 2)); // or input + 2
      break;
    case '1': // remove element
      del(trie, input + 2);
      break;
    case '2':
      countWord(trie, input + 2);
      break;
    case '3':
      longestPrefix(trie, input+2);
      break;
    }  
  }
}