Pagini recente » Cod sursa (job #331905) | Cod sursa (job #2618230) | Cod sursa (job #3226704) | Cod sursa (job #550454) | Cod sursa (job #882985)
Cod sursa(job #882985)
#include <cstdio>
#include <string.h>
using namespace std;
char a[100005][35];
int N=0,LEN[10005];
char L[35];
void adauga(char l[35])
{
int i,j,len,c;
len=strlen(l);
N++;
LEN[N]=len-2;
j=1;
for (c=2;c<=len;c++)
a[N][j++]=l[c];
}
void sterge(char l[35])
{
int i,j,len;
len=strlen(l);
int ok;
for (i=1;i<=N;i++)
if (LEN[i]==(len-2))
{
ok=1;
for (j=1;j<=LEN[i];j++)
if (a[i][j]!=l[j+1])
ok=0,j=LEN[i]+1;
if (ok==1)
LEN[i]=0,i=N+1;
}
}
void aparitii(char l[35])
{
int i,j,len,nr=0;
len=strlen(l);
int ok;
for (i=1;i<=N;i++)
if (LEN[i]==(len-2))
{
ok=1;
for (j=1;j<=LEN[i];j++)
if (a[i][j]!=l[j+1])
ok=0,j=LEN[i]+1;
if (ok==1)
nr++;
}
printf("%d\n", nr);
}
void prefix(char l[35])
{
int i,j,len,max=0,nr;
len=strlen(l);
for (i=1;i<=N;i++)
{
nr=0;
for (j=1;j<=LEN[i];j++)
if (a[i][j]!=l[j+1])
j=LEN[i]+1;
else
nr++;
if (nr>max)
max=nr;
}
printf("%d\n", max);
}
int main()
{
freopen ("trie.in","r",stdin);
freopen ("trie.out","w",stdout);
while (!feof(stdin))
{
fgets(L,35,stdin);
if (L[0]=='0')
adauga(L);
if (L[0]=='1')
sterge(L);
if (L[0]=='2')
aparitii(L);
if (L[0]=='3')
prefix(L);
}
fclose(stdin);
fclose(stdout);
return 0;
}