Pagini recente » Cod sursa (job #921252) | Cod sursa (job #220981) | Cod sursa (job #1507442) | Cod sursa (job #628291) | Cod sursa (job #2768648)
#include <fstream>
#include <algorithm>
#include <iostream>
using namespace std;
string s, aux;
int v[50001], l;
int base;
int l2;
const int MOD = 1e9 + 7;
void read() {
int i, j;
int hash;
ifstream f("abc2.in");
f >> s;
while (f >> aux) {
hash = 0;
for (j = 0; j < aux.size(); j++)
hash = (1LL * hash * 3 + (aux[j] - 'a')) % MOD;
l2 = aux.size();
v[++l] = hash;
}
}
int nr;
void solve() {
int i, st, dr, mij;
sort(v + 1, v + l + 1);
int hash = 0;
base = 1;
for (i = 0; i < l2; i++) {
hash = (1LL * hash * 3 + (s[i] - 'a')) % MOD;
if (i != 0)
base = (1LL * base * 3) % MOD;
}
cout << base;
st = 1, dr = l;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[mij] == hash) {
nr++;
break;
}
if (v[mij] < hash)
st = mij + 1;
else dr = mij - 1;
}
for (i = l2; i < s.size(); i++) {
hash = (((1LL * hash - 1LL * (s[i - l2] - 'a') * base + MOD) * 3LL) % MOD + (s[i] - 'a')) % MOD;
st = 1, dr = l;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[mij] == hash) {
nr++;
break;
}
else if (v[mij] < hash)
st = mij + 1;
else dr = mij - 1;
}
}
}
void output() {
ofstream g("abc2.out");
g << nr;
g.close();
}
int main() {
read();
solve();
output();
return 0;
}