Pagini recente » Cod sursa (job #2617215) | Cod sursa (job #121501) | Cod sursa (job #587934) | Cod sursa (job #2424913) | Cod sursa (job #1850091)
#include <fstream>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
const int N = 10000003;
const int H = 666013;
const int L = 24;
ifstream cin ("abc2.in");
ofstream cout ("abc2.out");
char s [N], d [L];
vector <unsigned int> h [H + 2];
vector <unsigned int> :: iterator it;
int main(){
int n, i, ans = 0, l, j, k;
bool found;
unsigned int a1, powBAZA;
n = 0;
cin.getline(s, N);
while (1){
cin.getline(d, L);
if (cin.eof())
break;
++n;
l = strlen(d);
a1 = 0;
for (i = 0; i < l; i++)
a1 = a1 * 3 + d [i] - 'a';
j = a1 % H;
h [j].push_back (a1);
}
if (n == 0) {
cout << "0\n";
return 0;
}
a1 = 0;
for (i = 0;s [i] && i < l; i++) {
a1 = (a1 * 3 )+ s [i] - 'a';
}
if (i != l) {
cout << "0\n";
return 0;
}
j = a1 % H;
found = 0;
for (it = h [j].begin(); it != h [j].end() && !found; ++it)
if ((*it) == a1){
ans++;
found = 1;
}
powBAZA = 1;
for (i = 1; i < l; i++){
powBAZA = powBAZA * 3;
}
n = strlen(s);
for (i = 1; i <= n - l; i++){
a1 = a1 - (s [i - 1] - 'a') * powBAZA;
a1 = ( a1 * 3 + s [i + l - 1] - 'a');
j = a1 % H;
found = 0;
for (it = h [j].begin(); it != h [j].end() && !found; ++it)
if ((*it) == a1){
ans++;
found = 1;
}
}
cout << ans << "\n";
return 0;
}