Pagini recente » Cod sursa (job #2987048) | Cod sursa (job #1911047) | Cod sursa (job #567375) | Cod sursa (job #2175664) | Cod sursa (job #1395080)
#include<fstream>
#include<vector>
#include<string>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct nod
{
vector<size_t> fii;
size_t 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,cuv2;
size_t op,poz,l;
while(!in.eof())
{
poz=1;
l=0;
in>>op;
in>>cuv;
if(in.good()) 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++;
else break;
cuv.erase(0,1);
}
out<<l<<'\n';
break;
}
}
}
}