Pagini recente » Cod sursa (job #2485562) | Cod sursa (job #1402535) | Cod sursa (job #2593713) | Cod sursa (job #1311374) | Cod sursa (job #102014)
Cod sursa(job #102014)
#include <cstdio>
#include <cstring>
struct elem {
int nx[3];
int& operator[] ( char x ) { return nx[x-'a']; };
};
const int SM = 10000000;
const int CM = 20;
const int EM = 1000000;
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;
}