Pagini recente » Cod sursa (job #2784162) | Cod sursa (job #290666) | Cod sursa (job #388642) | Cod sursa (job #2823541) | Cod sursa (job #2391873)
#include <bits/stdc++.h>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
string str;
struct trie
{
int s,nr,u[30];
}gol;
vector<trie> v;
void baga(int p,int nr,int s)
{
v[nr].s+=s;
if(p==str.size())
{
v[nr].nr+=s;
return;
}
if(!v[nr].u[str[p]-'a'])
{
v.push_back(gol);
v[nr].u[str[p]-'a']=v.size()-1;
}
baga(p+1,v[nr].u[str[p]-'a'],s);
}
int q1(int p,int nr)
{
if(p==str.size())
return v[nr].nr;
if(v[nr].u[str[p]-'a'])
return q1(p+1,v[nr].u[str[p]-'a']);
return 0;
}
int q2(int p,int nr)
{
if(p==str.size())
return bool(v[nr].s)*p;
if(!v[nr].s)
return max(p-1,0);
if(v[nr].u[str[p]-'a'])
return max(p,q2(p+1,v[nr].u[str[p]-'a']));
return p;
}
int main()
{
int nr;
v.push_back(gol);
while(in>>nr>>str)
{
if(!nr)
baga(0,0,1);
else if(nr==1)
baga(0,0,-1);
else if(nr==2)
out<<q1(0,0)<<"\n";
else
out<<q2(0,0)<<"\n";
}
return 0;
}