Pagini recente » Cod sursa (job #1032175) | Cod sursa (job #2948009) | Cod sursa (job #676091) | Cod sursa (job #712387) | Cod sursa (job #519867)
Cod sursa(job #519867)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#define DL 10000005
#define DN 20
#define DB 50005
#define ui unsigned int
using namespace std;
char s[DL],cuv[DN];
int n,m,nrc;
ui v[DB];
set<ui> se;
typedef set<ui>::iterator it;
int main() {
freopen("abc2.in", "r", stdin);
freopen("abc2.out", "w", stdout);
fgets(s, DL, stdin);
n=strlen(s)-1;
while (fgets(cuv, DN, stdin)) {
m=strlen(cuv)-1;
ui cod=0;
for(int i=0; i<m; ++i)
cod=cod*3+cuv[i]-'a';
v[++nrc] = cod;
se.insert(cod);
}
ui cod=0,pow = 1,sol=0;
for (int i=1;i<m; ++i) pow *= 3;
for (int i=0; i<m; ++i)
cod = cod*3 + s[i]-'a';
it c=se.find(cod);
//int gasit=lower_bound(v+1,v+nrc+1,cod)-v;
if(c!=se.end()) ++sol;
for(int i=m; i<n; ++i) {
cod-=pow*(s[i-m]-'a');
cod=cod*3+s[i]-'a';
c=se.find(cod);
if(c!=se.end()) ++sol;
}
printf("%d\n", sol);
}