Pagini recente » Cod sursa (job #3265518) | Cod sursa (job #1829348) | Cod sursa (job #3286435) | Cod sursa (job #3274294) | Cod sursa (job #1850084)
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
const int N = 10000003;
const int H = 666013;
char s [N], d [24];
vector <int> h [H];
int main(){
int n, i, ans = 0, l, j, k;
bool found;
long long a1, powBAZA;
freopen("abc2.in", "r", stdin);
freopen("abc2.out", "w", stdout);
n = 0;
scanf("%s\n", s);
while ((scanf("%s", d ) != EOF)){
l = strlen(d);
a1 = 0;
for (i = 0; i < l; i++)
a1 = 1ll * a1 * 3 + d [i] - 'a';
j = a1 % H;
h [j].push_back (a1);
}
a1 = 0;
for (i = 0;s [i] && i < l; i++) {
a1 = (1ll * a1 * 3 )+ s [i] - 'a';
}
if (i != l) {
printf("0\n");
return 0;
}
j = a1 % H;
found = 0;
for (i = 0; i < h [j].size() && !found; ++i)
if (h [j][i] == a1){
ans++;
found = 1;
}
powBAZA = 1;
for (i = 1; i < l; i++){
powBAZA = 1ll * powBAZA * 3;
}
n = strlen(s);
for (i = 1; i < n - l; i++){
a1 = a1 - 1ll * (s [i - 1] - 'a') * powBAZA;
a1 = (1ll * a1 * 3 + s [i + l - 1] - 'a');
j = a1 % H;
found = 0;
for (k = 0; k < h [j].size() && !found; ++k)
if (h [j][k] == a1){
ans++;
found = 1;
}
}
printf("%d\n", ans);
return 0;
}