Pagini recente » Cod sursa (job #2843541) | Cod sursa (job #1772480) | Cod sursa (job #355600) | Cod sursa (job #2130720) | Cod sursa (job #2258486)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct trie
{
char val;
int ap;
vector <int> copii;
} v[2000111];
int a=0;
char ch[333];
void add ()
{
int cn=0,lg=strlen(ch),cp=0;
for (int i=0; i<v[cn].copii.size(); ++i)
{
if (v[cn].val==ch[2+cp])
{
v[cn].ap++;
cn=v[cn].copii.at(i);
i=0;
cp++;
}
}
if (cp+2<lg)
{
while (cp+2<lg)
{
v[cn].copii.push_back(a+1);
a+=1;
v[a].ap+=1;
v[a].val=ch[cp+2];
cn=a;
cp++;
}
}
}
void delet ()
{
int cn=0,lg=strlen(ch),cp=0;
for (int i=0; i<v[cn].copii.size() && cp+2<lg; ++i)
{
if (v[cn].val==ch[2+cp])
{
v[cn].ap--;
cn=v[cn].copii.at(i);
i=0;
cp++;
}
}
}
void apra()
{
int cn=0,lg=strlen(ch),cp=0,apr,ln;
for (int i=0; i<v[cn].copii.size() && cp+2<lg; ++i)
{
if (v[cn].val==ch[2+cp])
{
//v[cn].ap++;
apr=v[cn].ap;
ln=cn;
cn=v[cn].copii.at(i);
i=0;
cp++;
if (cp==lg-3)
{
break;
}
}
}
int ans=v[ln].ap;
for (int i=0;i<v[ln].copii.size();++i)
{
ans-=v[v[ln].copii.at(i)].ap;
}
if (cp==lg-3)
{
fout<<ans<<"\n";
return;
}
fout<<0<<"\n";
}
void chibrit ()
{
int cn=0,lg=strlen(ch),cp=0;
for (int i=0; i<v[cn].copii.size(); ++i)
{
if (v[cn].val==ch[2+cp])
{
//v[cn].ap++;
cn=v[cn].copii.at(i);
i=0;
cp++;
}
else
{
if (i==v[cn].copii.size()-1)
{
fout<<cp<<"\n";
return;
}
}
}
fout<<cp<<"\n";
}
int main()
{
while (fin.getline(ch,30))
{
switch (ch[0])
{
case '0':
add();
break;
case '1':
delet();
break;
case '2':
apra();
break;
case '3':
chibrit();
break;
}
//memset(ch,0,30);
}
cout<<v[0].copii.size();
return 0;
}