Pagini recente » Cod sursa (job #876160) | Cod sursa (job #2204961) | Cod sursa (job #1371810) | Cod sursa (job #1678512) | Cod sursa (job #2588899)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
const int M = 666019, N = 50001;
unsigned int l = 25;
unsigned int val[N], urm[N], lst[M];
int nr;
string text;
string word;
unsigned int cod3(string s)
{
unsigned int c = 0;
for (int i = 0; i < s.length(); i++)
{
c = c * 3 + (s[i] - 'a');
}
return c;
}
bool apartine(int x)
{
int c = x % M;
for(int p = lst[c]; p != 0; p = urm[p]){
if(val[p] == x){
return true;
}
}
return false;
}
void adauga(int x)
{
int c = x % M;
if(apartine(x)){
return;
}
val[++nr] = x;
urm[nr] = lst[c];
lst[c] = nr;
}
int main()
{
in >> text;
int L = text.length();
while(in >> word){
adauga(cod3(word));
}
l = word.length();
unsigned int r = 0, c = cod3(text.substr(0, l));
if (apartine(c))
{
r++;
}
//p3 = 3 la l - 1
int p3 = 1;
while(l > 1){
p3 *= 3;
l--;
}
for (int i = l; i < text.length(); i++)
{
c = c % p3 * 3 + (text[i] - 'a');
if (apartine(c))
{
r++;
}
}
out << r;
return 0;
}