Cod sursa(job #1410896)

Utilizator PetrutiuPaulPetrutiu Paul Gabriel PetrutiuPaul Data 31 martie 2015 12:34:53
Problema Trie Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <set>

using namespace std;

    ifstream fin("trie.in");
    ofstream fout("trie.out");

set <pair<string ,int> > s;
int nr[1000];
string cuv,act;

int cp(string s1, string s2)
{
    int l1=s1.size();
    int l2=s2.size();
    int i;

    for(i=0; i<min(l1,l2) && s1[i]==s2[i];i++);

    return i;
}

int main()
{
    int tip,v1,v2,N=0;

    act+='z'+2;

    set <pair<string ,int> >:: iterator it;

    s.insert(make_pair(act,0));

    while (fin>>tip>>cuv)
    {

        act=cuv;

        if(tip==0)
        {
            it=s.lower_bound(make_pair(act,0));
            if(it->first==act)nr[it->second]++;
            else {s.insert(make_pair(act,++N));nr[N]=1;}
        }
        if(tip==1)
        {
            it=s.lower_bound(make_pair(act,0));
                nr[it->second]--;
            if(it->second==0)s.erase(it);
        }
        if(tip==2)
        {
            it=s.lower_bound(make_pair(act,0));
            if(it->first==act)fout<<nr[it->second]<<'\n';
            else fout<<0<<'\n';
        }
        if(tip==3)
        {
            v1=v2=0;

            it=s.lower_bound(make_pair(act,0));

            v1=cp(it->first,act);

            if(it!=s.begin())
            {
                it--;

                v2=cp(it->first,act);
            }

            fout<<max(v1,v2)<<'\n';

        }
    }
}