Pagini recente » Cod sursa (job #238619) | Cod sursa (job #1797630) | Cod sursa (job #1392276) | Cod sursa (job #1172960) | Cod sursa (job #2102424)
#include <unordered_map>
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
const int mod1 = 666013;
const int mod2 = 30000;
unordered_map <int, bool> marcat;
string text;
string cuv;
void codif(string s)
{
/*
int p1 = 0;
int p2 = 0;
for(auto it : s)
{
p1 = (p1 * 3 + it - 'a') % mod1;
p2 = (p2 * 3 + it - 'a') % mod2;
}
*/
//marcat[make_pair(p1, p2)] = 1;
int p = 0;
for(auto it : s)
p = p * 3 + it - 'a';
marcat[p] = 1;
}
int main()
{
in >> text;
while(in >> cuv)
codif(cuv);
int lg = cuv.size();
int put3 = 1;
int a = 0;
for(unsigned int i = 0; i < lg; i++)
{
a = a * 3 + text[i] - 'a';
put3 = put3 * 3;
}
put3 = put3 / 3;
int nr = 0;
for(unsigned int i = lg; i < text.size(); i++)
{
//cerr << a << "\n";
if(marcat[a] == 1)
nr++;
a = a - put3 * (text[i - lg] - 'a');
a = a * 3 + text[i] - 'a';
}
if(marcat[a] == 1)
nr++;
out << nr << "\n";
return 0;
}