Pagini recente » Cod sursa (job #1084164) | Cod sursa (job #150670) | Cod sursa (job #725365) | Cod sursa (job #860394) | Cod sursa (job #2802248)
#include <bits/stdc++.h>
using namespace std;
#define int unsigned int
ifstream in("abc2.in");
ofstream out("abc2.out");
const int MOD = 90911;
vector<int> h[MOD];
void insert(string &s) {
int x = 0;
for (int i = 0; i < (int)s.size(); i++) {
x = x * 3 + s[i] - 'a';
}
h[x % MOD].push_back(x);
}
bool find(int x) {
int xh = x % MOD;
for (int val : h[xh])
if (val == x)
return true;
return false;
}
//
//bool isprime(int x) {
// for (int i = 2; i * i <= x; i++)
// if (x % i == 0)
// return false;
// return true;
//}
signed main() {
ios_base::sync_with_stdio(false);
in.tie(NULL);
string s; in >> s;
vector<int> v;
int l = 0;
string c; while (in >> c) {
insert(c);
l = (int)c.size();
}
// int xx = MOD + 1;
// while (!isprime(xx)) xx++;
// cerr << xx << "\n";
int p = 1, x = 0;
for (int i = 0; i < l; i++) {
x = x * 3 + s[i] - 'a';
if (i > 0)
p *= 3;
}
int ans = 0;
if (find(x))
ans++;
for (int i = l; i < (int)s.size(); i++) {
x = (x - p * (s[i - l] - 'a')) * 3 + s[i] - 'a';
if (find(x))
ans++;
}
out << ans << "\n";
return 0;
}