Pagini recente » Cod sursa (job #1323386) | Cod sursa (job #3226380) | Cod sursa (job #2890879) | Cod sursa (job #2898029) | Cod sursa (job #2260552)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 10000005;
const int P = 50003;
const int P1 = 123457;
char sir[Nmax + 5];
char a[55];
int La, Lsir;
vector < unsigned int > L[2 * P];
inline bool Ok(unsigned int H, unsigned int H1)
{
int r;
r = H % P;
for(auto it : L[r])
if(it == H1)
return true;
return false;
}
int main()
{
int sol = 0;
unsigned int p, H, H1, p1;
FILE *fin=fopen ("abc2.in","r");
FILE *fout=fopen ("abc2.out","w");
fgets (sir,10000005,fin);
Lsir = strlen(sir) - 1;
while(fgets (a,25,fin))
{
if(strlen(a) - 1 > 0)
La = strlen(a) - 1;
H = H1 = 0;
for(int j = 0 ; j < La ; j++)
{
H = (H * 3 + (a[j] - 'a'));
H1 = (H1 * 3 + (a[j] - 'a'));
}
if(!Ok(H, H1))
L[H % P] . push_back(H1 % P1);
}
H = H1 = 0;
p = p1 = 1;
for(int i = 0 ; i < La ; i++)
{
H = (H * 3 + (sir[i] - 'a'));
H1 = (H1 * 3 + (sir[i] - 'a'));
if(i > 0)
{
p = (p * 3);
p1 = (p1 * 3);
}
}
sol += Ok(H, H1 % P1);
for(int i = La ; i < Lsir ; i++)
{
H = ((H - (sir[i - La] - 'a') * p) * 3 + (sir[i] - 'a'));
H1 = ((H1 - (sir[i - La] - 'a') * p1) * 3 + (sir[i] - 'a'));
sol += Ok(H, H1 % P1);
}
fprintf (fout,"%d",sol);
return 0;
}