Pagini recente » Cod sursa (job #2635004) | Cod sursa (job #2202899) | Cod sursa (job #1624798) | Cod sursa (job #1195203) | Cod sursa (job #851267)
Cod sursa(job #851267)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <stack>
#include <cassert>
using namespace std;
#define PRO "trie"
void OpenFiles(int EVAL)
{
if(EVAL)
{
char input[100] = PRO, output[100] = PRO;
freopen(strcat(input, ".in"),"r",stdin);
freopen(strcat(output,".out"),"w",stdout);
} else
{
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
}
}
#define MAX 100001
#define INF 0xffffff
char a[MAX];
struct trie{
struct trie * f[26];
trie(){ for(int i=0;i<26;i++) f[i]=NULL; p=nr=0; }
int p,nr; }*t;
void add(char *b)
{
trie *g=t;
int urm;
while( isalpha(*b) )
{
urm = *b-'a';
if(g->f[urm]==NULL)g->f[urm]=new trie;
g=g->f[urm];
g->p++;
b++;
}
g->nr++;
}
void del(char *b)
{
trie *g=t;
int urm;
while( isalpha(*b) )
{
urm = *b-'a';
g=g->f[urm];
g->p--;
b++;
}
g->nr--;
}
int app(char *b)
{
trie *g=t;
int urm;
while( isalpha(*b) )
{
urm = *b-'a';
if(g->f[urm]==NULL)return 0;
g=g->f[urm];
b++;
}
return g->nr;
}
int pre(char *b)
{
trie *g=t;
int urm,l=0;
while( isalpha(*b))
{
urm = *b-'a';
if(g->f[urm]==NULL)return l;
g=g->f[urm];
if(g->p<1)return l;
l++;
b++;
}
return l;
}
int main(int argv,char *args[])
{
OpenFiles(argv==0);
// start
int op;
t = new trie;
while( scanf("%d %s ",&op,a) != -1)
{
switch(op)
{
case 0: add(a); break;
case 1: del(a); break;
case 2: printf("%d\n",app(a)); break;
case 3: printf("%d\n",pre(a)); break;
}
}
return 0;
}