Pagini recente » Cod sursa (job #2946620) | Cod sursa (job #1734155) | Cod sursa (job #1902234) | Cod sursa (job #1577416) | Cod sursa (job #1846037)
#include <fstream>
#include <set>
#include <cmath>
using namespace std;
ifstream ka("abc2.in");
ofstream ki("abc2.out");
const int MOD = 999007;
string text, s;
int rezultat, sol, step;
set <int> lista[MOD];
int main()
{
getline(ka, text);
int marime;
while(getline(ka, s))
{
marime = s.size();
int nr = 0;
for(int i = 0; i < marime; i++)
nr = nr * 3 + s[i] - 'a';
lista[nr % MOD].insert(nr);
}
int cautat = 0;
int putere = 0;
for(int i = 0; i < marime; i++)
{
cautat = 3 * cautat + text[i] - 'a';
putere++;
}
putere--;
int produs = pow(3, putere);
int de_cautat = cautat % MOD;
if(lista[de_cautat].find(cautat) != lista[de_cautat].end())
sol++;
for(int i = marime; i < text.size(); i++)
{
cautat -= (text[i - marime] - 'a') * produs;
cautat = cautat * 3 + text[i] - 'a';
de_cautat = cautat % MOD;
if(lista[de_cautat].find(cautat) != lista[de_cautat].end())
sol++;
}
ki << sol;
}