Pagini recente » Cod sursa (job #2761822) | Cod sursa (job #2663452) | Cod sursa (job #2380110) | Cod sursa (job #1456344) | Cod sursa (job #719304)
Cod sursa(job #719304)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<string>
using namespace std;
#define maxn (1<<20)
char sir[maxn];
struct trie_node{
bool final;
int children[26];
int tata;
trie_node() {
final = false;
memset(children, 0, sizeof(children));
};
};
struct trie{
vector <trie_node> nodes;
int rad;
trie() {
trie_node a;
nodes.push_back(a);
nodes.push_back(a);
rad = 1;
}
void add(char *);
};
void trie:: add( char *cuvant) {
int nod_act = rad;
string cuv(cuvant);
int len = cuv.size();
int i = 0;
while( nodes[nod_act].children[cuv[i]-'a'] != 0 ) {
nod_act = nodes[nod_act].children[cuv[i]-'a'];
i++;
}
for( ; i < len; ++i) {
trie_node a;
a.tata = nod_act;
nodes.push_back(a);
nodes[nod_act].children[cuv[i]-'a'] = nodes.size() - 1;
nod_act = nodes.size() - 1;
}
nodes[nod_act].final = true;
}
int main() {
freopen("ahocorasick.in", "r", stdin);
freopen("ahocorasick.out", "w", stdout);
int nr_cuv;
scanf("%s\n%d", sir, &nr_cuv);
trie tri;
for( int i = 0; i < nr_cuv; ++i) {
char temp_cuv[10001];
scanf("%s", temp_cuv);
tri.add (temp_cuv);
}
return 0;
}