Cod sursa(job #922946)

Utilizator mvcl3Marian Iacob mvcl3 Data 22 martie 2013 18:47:27
Problema Trie Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <list>
#include <string>
using namespace std;

ifstream f("trie.in"); ofstream g("trie.out");

const int NMAX = 30;
char line[NMAX];
list <string> L;
list <string> :: iterator it;

inline void erase(char *s) {
    string t(s);
    for(it = L.begin(); it != L.end(); ++it)
        if(*it == t) {
            L.erase(it);
            break;
        }
}

inline int count(char *s) {
    string t(s);
    int cnt = 0;
    for(it = L.begin(); it != L.end(); ++it)
        if(*it == t) ++cnt;
    return cnt;
}

inline int pre(char *s) {
    string t(s), tt;
    int l1, l2, len = 0;
    l1 = t.length() - 1;
    for(it = L.begin(); it != L.end(); ++it) {
        tt =  *it, l2 = tt.length() - 1;
        int i;
        for(i = 0; i <= l1 && i <= l2 && t[i] == tt[i]; ++i);
        len = len  < i ? i : len;
    }
    return len;
}

int main() {
    while(!f.eof()) {
        f.getline(line, NMAX);
        switch(line[0]) {
            case '0' : { L.push_back(line + 2); break; }
            case '1' : { erase(line + 2); break; }
            case '2' : { g << count(line + 2) << '\n'; break; }
            case '3' : { g << pre(line + 2) << '\n'; break; }
        }
    }

    g.close();
    return 0;
}