Pagini recente » Cod sursa (job #2801630) | Cod sursa (job #3269843) | Cod sursa (job #887740) | Cod sursa (job #1664765) | Cod sursa (job #3256944)
#include <bits/stdc++.h>
using namespace std;
int n , x , Max;
char c[25];
ifstream f("trie.in");
ofstream g("trie.out");
struct Node{
int cnt;
Node *son[26];
Node(){
cnt=0;
for(int i=0;i<26;i++) son[i]=nullptr;
}
};
Node *t=new Node();
void update1(Node *nod , char *p , int l)
{
if(l==0){
++nod->cnt;
return;
}
int c=*p-'a';
if(nod->son[c]==nullptr) nod->son[c]=new Node();
update1(nod->son[c] , p+1 , l-1);
}
void update2(Node *nod , char *p , int l)
{
int c=*p-'a';
if(l==0){
--nod->cnt;
if(nod->cnt==0){
nod->son[c]=nullptr;
}
return;
}
if(nod->son[c]==nullptr) return;
update2(nod->son[c] , p+1 , l-1);
}
int query1(Node *nod , char *p , int l)
{
if(l==0) return nod->cnt;
int c=*p-'a';
if(nod->son[c]==nullptr) return 0;
query1(nod->son[c] , p+1 , l-1);
}
int query2(Node *nod , char *p , int l , int nr)
{
int c=*p-'a';
if(nod->son[c]==nullptr) return nr-l;
query2(nod->son[c] , p+1 , l-1 , nr);
}
int main()
{
while(f >> x){
Max=0;
f.get();
f.getline(c , 20);
int m=strlen(c);
if(x==0){
update1(t , c , m);
}
if(x==1){
update2(t , c , m);
}
if(x==2){
g << query1(t , c , m) << '\n';
}
if(x==3){
g << query2(t , c , m , m) << '\n';
}
}
}