Cod sursa(job #722720)

Utilizator algotrollNume Fals algotroll Data 24 martie 2012 18:10:12
Problema Trie Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<string>
#include<set>
using namespace std;
typedef multiset<string>::iterator iset;

int pre_l(const string &a, const string &b)
{
    int i;
    for (i=0;i<a.size()&&i<b.size()&&a[i]==b[i];i++);
    return i;
}

int com_pre(multiset<string> &M, string &s)
{
    iset it=M.upper_bound(s);
    if (it==M.begin()) return pre_l(*it,s);
    if (it==M.end()) return pre_l(*(--it),s);
    return max(pre_l(*it,s),pre_l(*(--it),s));
}

int main()
{
    ifstream fin("trie.in");
    ofstream fout("trie.out");
    multiset<string> M;
    while (!fin.eof())
    {
        int op; string tmp;
        fin>>op>>tmp; if (tmp=="") continue;
        switch (op)
        {
        case 0:
            M.insert(tmp);
            break;
        case 1:
            M.erase(M.find(tmp));
            break;
        case 2:
            fout<<M.count(tmp)<<'\n';
            break;
        case 3:
            fout<<com_pre(M, tmp)<<'\n';
        }
    }
    return 0;
}