Cod sursa(job #102012)

Utilizator tvladTataranu Vlad tvlad Data 13 noiembrie 2007 23:00:03
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.03 kb
#include <cstdio>
#include <cstring>

struct elem {
	int nx[3];
	int& operator[] ( char x ) { return nx[x-'a']; };
};

const int SM = 1000;//0000;
const int CM = 20;
const int EM = 1000;//000;

char s[SM+1];
char cuv[CM+1];
int nv;
elem v[EM+1];

int main() {
	freopen("abc2.in","rt",stdin);
	freopen("abc2.out","wt",stdout);
	fgets(s,SM+1,stdin);
	nv = 0;
	int cur = 0, cuvlen = 0;
	if (!feof(stdin)) {
		scanf("%s\n",cuv);
		cuvlen = strlen(cuv);
		cur = 0;
		for (int i = 0; i < cuvlen; ++i) {
			if (v[cur][cuv[i]] == 0) v[cur][cuv[i]] = ++nv;
			cur = v[cur][cuv[i]];
		}
	}
	while (!feof(stdin)) {
		scanf("%s\n",cuv);
		cur = 0;
		for (int i = 0; i < cuvlen; ++i) {
			if (v[cur][cuv[i]] == 0) v[cur][cuv[i]] = ++nv;
			cur = v[cur][cuv[i]];
		}
	}
	int r = 0;
	int n = strlen(s);
	for (int i = 0; i<n-cuvlen; ++i) {
		cur = 0;
		for (int j = i; j<i+cuvlen; ++j) {
			if (v[cur][s[j]]) {
				cur = v[cur][s[j]];
			} else {
				--r;
				break;
			}
		}
		++r;
	}
	printf("%d\n",r);
	return 0;
}