Pagini recente » Cod sursa (job #2870181) | Cod sursa (job #2769688) | Cod sursa (job #2627648) | Cod sursa (job #1827787) | Cod sursa (job #1989604)
#include <fstream>
#include<cstring>
#include<iostream>
using namespace std;
ifstream g ("trie.in");
//ofstream cout ("trie.out");
ifstream f ("trie.out");
char s[100100]; int k,nodes,maxim=-1,tata[100100],grad[100100];
struct bla
{
int nod; char c; int urm,start,nr;
} t[100100];
void adauga (int poz,int rad)
{
for(int x=t[rad].start;x!=0;x=t[x].urm)
{
if(t[x].c==s[poz] && t[x].nod!=-1)
{
if(poz==strlen(s)-1) t[x].nr++;
else adauga(poz+1,t[x].nod);
return;
}
}
nodes++; grad[rad]++;
t[nodes].nod=nodes; t[nodes].urm=t[rad].start; t[rad].start=nodes; t[nodes].c=s[poz]; tata[nodes]=rad;
if(poz==strlen(s)-1) t[nodes].nr++;
else adauga(poz+1,nodes);
}
void verif (int varf)
{
if(t[varf].start!=0) return;
if(t[varf].nr!=0) return;
if(grad[varf]>1) return;
if(varf==0) return;
int rad=tata[varf];
for(int x=t[rad].start;x!=0;x=t[x].urm)
{
if(t[x].nod==varf) {t[x].nod=-1;grad[tata[varf]]--; break;}
}
verif(tata[varf]);
}
void sterge (int poz,int rad)
{
for(int x=t[rad].start;x!=0;x=t[x].urm)
{
if(t[x].c==s[poz])
{
if(poz==strlen(s)-1) {t[x].nr--; verif(t[x].nod);}
else sterge(poz+1,t[x].nod);
return;
}
}
}
void answare (int poz,int rad)
{
for(int x=t[rad].start;x!=0;x=t[x].urm)
{
if(t[x].c==s[poz] && t[x].nod!=-1)
{
if(poz==strlen(s)-1) cout<<t[x].nr<<"\n";
else answare(poz+1,t[x].nod);
return;
}
}
cout<<0<<"\n";
}
void answare_again (int poz,int rad)
{
for(int x=t[rad].start;x!=0;x=t[x].urm)
{
if(t[x].c==s[poz] && t[x].nod!=-1)
{
if(t[x].c==s[poz]) maxim=max(maxim,poz);
if(poz==strlen(s)-1) return;
else
answare_again(poz+1,t[x].nod);
}
}
}
void read ()
{ int p;
while(cin>>p)
{
cin>>s;
if(p==0) adauga(0,0);
else if(p==1) sterge(0,0);
else if(p==2) answare(0,0);
else if(p==3) {answare_again(0,0); cout<<maxim+1<<"\n"; maxim=-1; }
}
}
int main()
{
//read();
int x,y,nr=0;
while(g>>x)
{ nr++;
f>>y;
if(x!=y) cout<<nr<<"\n";
}
return 0;
}