Pagini recente » Cod sursa (job #2181516) | Cod sursa (job #542605) | Cod sursa (job #2647610) | Cod sursa (job #2221488) | Cod sursa (job #1394957)
#include<fstream>
#include<vector>
#include<string>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct nod
{
vector<int> fii;
int aparitii,tata,cuvinte;
}
;
int main()
{
vector<nod> noduri;
noduri.resize(2);
noduri[0].fii.resize(26);
noduri[1].fii.resize(26);
noduri[0].aparitii=0;
noduri[1].aparitii=0;
noduri[0].cuvinte=0;
noduri[1].cuvinte=0;
string cuv;
int op,poz,l;
while(!in.eof())
{
poz=1;
l=0;
in>>op;
in>>cuv;
switch(op)
{
case 0:
{
while(cuv.size())
{
if(noduri[poz].fii[cuv[0]-'a'])
{
poz=noduri[poz].fii[cuv[0]-'a'];
cuv.erase(0,1);
}
else
{
noduri.resize(noduri.size()+1);
noduri[poz].fii[cuv[0]-'a']=noduri.size()-1;
noduri[noduri[poz].fii[cuv[0]-'a']].tata=poz;
poz=noduri[poz].fii[cuv[0]-'a'];
noduri[poz].fii.resize(26);
noduri[poz].aparitii=0;
noduri[poz].cuvinte=0;
cuv.erase(0,1);
}
noduri[poz].aparitii++;
}
noduri[poz].cuvinte++;
break;
}
case 1:
{
while(cuv.size())
{
poz=noduri[poz].fii[cuv[0]-'a'];
cuv.erase(0,1);
noduri[poz].aparitii--;
}
noduri[poz].cuvinte--;
break;
}
case 2:
{
while(cuv.size())
{
poz=noduri[poz].fii[cuv[0]-'a'];
cuv.erase(0,1);
}
out<<noduri[poz].cuvinte<<'\n';
break;
}
case 3:
{
while(cuv.size())
{
if(noduri[poz].fii[cuv[0]-'a']&&noduri[noduri[poz].fii[cuv[0]-'a']].aparitii)
poz=noduri[poz].fii[cuv[0]-'a'],l++;
cuv.erase(0,1);
}
out<<l<<'\n';
break;
}
}
}
}