Pagini recente » Cod sursa (job #2919639) | Cod sursa (job #2598033) | Cod sursa (job #133124) | Cod sursa (job #2892142) | Cod sursa (job #2260691)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("abc2.in");
ofstream fout ("abc2.out");
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[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;
fin >> (sir + 1);
Lsir = strlen(sir + 1);
while(fin >> (a + 1))
{
La = strlen(a + 1);
H = H1 = 0;
for(int j = 1 ; 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);
}
if(La > Lsir)
{
fout << "0\n";
return 0;
}
H = H1 = 0;
p = p1 = 1;
for(int i = 1 ; i <= La ; i++)
{
H = (H * 3 + (sir[i] - 'a'));
H1 = (H1 * 3 + (sir[i] - 'a'));
if(i > 1)
{
p = (p * 3);
p1 = (p1 * 3);
}
}
sol += Ok(H, H1);
for(int i = La + 1; 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);
}
fout << sol << "\n";
fin.close();
fout.close();
return 0;
}