Pagini recente » Cod sursa (job #2388588) | Cod sursa (job #2187473) | Cod sursa (job #2406693) | Cod sursa (job #965662) | Cod sursa (job #2875363)
#include <bits/stdc++.h>
//#pragma GCC optimize ("O3")
//#pragma GCC optimize ("unroll-loops")
//#pragma GCC optimize ("Ofast")
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
int sum,nr,v[30];
};
vector <trie> a;
char s[21];
int k,p;
void add(int x,int i)
{
a[x].sum++;
if(s[i+1]=='\0')
a[x].nr++;
else
{
if(a[x].v[s[i+1]-'a']==0)
k++,a[x].v[s[i+1]-'a']=k,a.push_back({0,0,0});
add(a[x].v[s[i+1]-'a'],i+1);
}
}
void del(int x,int i)
{
a[x].sum--;
if(s[i+1]=='\0')
a[x].nr--;
else
del(a[x].v[s[i+1]-'a'],i+1);
}
int ap(int x,int i)
{
if(s[i+1]=='\0')
return a[x].nr;
if(a[x].v[s[i+1]-'a']==0)
return 0;
return ap(a[x].v[s[i+1]-'a'],i+1);
}
int pref(int x,int i)
{
if(a[x].sum==0)
return max(i-1,0);
if(s[i+1]=='\0')
return i;
if(a[x].v[s[i+1]-'a']==0)
return i;
return pref(a[x].v[s[i+1]-'a'],i+1);
}
int main()
{a.push_back({0,0,0});
while (f>>p)
{
f>>(s+1);
if (p==0) add(0,0);
if (p==1) del(0,0);
if (p==2) g<<ap(0,0)<<'\n';
if (p==3) g<<pref(0,0)<<'\n';
}
}