Pagini recente » Cod sursa (job #1673641) | Cod sursa (job #3227981) | Cod sursa (job #2881195) | Cod sursa (job #877439) | Cod sursa (job #2261562)
#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[200111];
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)
{
int cnn=v[cn].copii.at(i);
if (v[cnn].val==ch[2+cp])
{
v[cnn].ap++;
cn=cnn;
i=0;
cp++;
}
}
if (cp+2<lg)
{
while (cp+2<lg)
{
v[cn].copii.push_back(++a);
//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)
{
int cnn=v[cn].copii.at(i);
if (v
[cnn].val==ch[2+cp])
{
v[cnn].ap--;
cnn=v[cnn].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)
{
int cnn=v[cn].copii.at(i);
if (v[cnn].val==ch[2+cp])
{
//v[cn].ap++;
apr=v[cnn].ap;
ln=cn;
cn=cnn;
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;
}