Pagini recente » Cod sursa (job #228266) | Cod sursa (job #2268696) | Cod sursa (job #184335) | Cod sursa (job #2367469) | Cod sursa (job #2441986)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int baza = 3;
int n, m;
char A[10000005];
char a[25];
ll v[50005];
int k;
bool este(long long x)
{
int poz = 1;
for (int p = 20; p >= 0; p--)
if (poz + (1 << p) <= k && v[poz + (1 << p)] <= x)
poz += (1 << p);
return v[poz] == x;
}
signed main()
{
FILE *fi, *fo;
fi = fopen("abc2.in", "r");
fo = fopen("abc2.out", "w");
fgets(A + 1, 10000000, fi);
n = strlen(A + 1);
if (A[n] == '\n')
n--;
while (fgets(a + 1, 30, fi))
{
m = strlen(a + 1);
if (a[m] == '\n')
m--;
long long cod = 0;
for (int i = 1; i <= m; i++)
{
cod = 1LL * cod * baza + 1LL * (a[i] - 'a');
}
v[++k] = cod;
}
if (n < m)
{
fprintf(fo, "0");
return 0;
}
int rez = 0;
long long p = 1;
for (int i = 1; i < m; i++)
p *= baza;
long long cod = 0;
for (int i = 1; i <= m; i++)
{
cod = cod * baza + (A[i] - 'a');
}
if (este(cod))
rez++;
for (int i = m + 1; i <= n; i++)
{
cod -= p * (A[i - m] - 'a');
cod = cod * baza + (A[i] - 'a');
if (este(cod))
rez++;
}
fprintf(fo, "%d", rez);
return 0;
}