Pagini recente » Cod sursa (job #1247641) | Cod sursa (job #2203044) | Cod sursa (job #623664) | Cod sursa (job #383405) | Cod sursa (job #2262645)
#include <bits/stdc++.h>
#define P 50000 + 3
#define NMax 10000000 + 7
using namespace std;
ifstream fin ("abc2.in");
ofstream fout ("abc2.out");
vector <int> Hash[P];
char a[NMax], s[27];
int pow3[25];
int n, cod, cnt;
inline void Citire ()
{
fin >> a;
pow3[0] = 1;
for (int i = 1; i <= 22; i++)
pow3[i] = 3 * pow3[i - 1];
while (fin >> s)
{
n = strlen (s);
for (int i = 0; i < n; i++)
cod += pow3[i] * (s[i] - 'a');
Hash[cod % P].push_back(cod);
cod = 0;
}
cod = 0;
}
inline void Rezolva ()
{
int M;
///primul cuvant
for (int i = 0; i < n; i++)
cod += pow3[i] * (a[i] - 'a');
int X = cod % P;
for (auto w : Hash[X])
{
if (cod == w)
{
cnt++;
break;
}
}
///restul sirului
M = strlen (a);
for (int i = n; i < M; i++)
{
cod /= 3;
cod += pow3[n - 1] * (a[i] - 'a');
X = cod % P;
for (auto w : Hash[X])
{
if (w == cod)
{
cnt++;
break;
}
}
}
fout << cnt << "\n";
}
int main()
{
Citire();
Rezolva();
return 0;
}