Pagini recente » Cod sursa (job #235700) | Cod sursa (job #1850003)
#include <iostream>
#include <fstream>
#include <cmath>
//#include <vector>
//#include <set>
#include <algorithm>
#include <unordered_map>
#include <cstring>
//#include <string>
//#include <queue>
#define mp make_pair
#define pb push_back
#define ff(i, x, n) for (int i = x; i <= n; ++i)
#define dd cout <<
#define nn << '\n'
#define ss << ' ' <<
#define prim 1299709
using namespace std;
char t[10000005], c[25];
vector<unsigned int> v[prim];
bool cauta(unsigned int nr) {
int l = nr % prim;
for (auto it = v[l].begin(); it!= v[l].end(); ++it) {
if (*it == nr) {
return 1;
}
}
return 0;
}
int main(){
//freopen("schi.in", "r", stdin);
//freopen("schi.out", "w", stdout);
ifstream in("abc2.in");
ofstream out("abc2.out");
in >> t;
int lt = strlen(t), lc = 0, r = 0, i;
unsigned int nr;
ff(i, 0, lt - 1) {
t[i] -= 'a';
}
while (in >> c) {
nr = 0;
lc = (lc != 0)? (lc) : (strlen(c));
ff(i, 0, lc - 1) {
nr = nr * 3 + c[i] - 'a';
}
v[nr % prim].pb(nr);
}
nr = 0;
long long pp = pow(3, lc - 1);
for (i = 0; i < lc; ++i) {
nr = nr * 3 + t[i];
}
if (cauta(nr)) {
++r;
}
for (; i < lt; ++i) {
nr -= pp * t[i - lc];
nr *= 3;
nr += t[i];
if (cauta(nr)) {
++r;
}
}
cout << r << '\n';
}