Pagini recente » Cod sursa (job #2065674) | Cod sursa (job #1652734) | Cod sursa (job #1652911) | Cod sursa (job #2220662) | Cod sursa (job #1447377)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
const int M = 666019;
int urm[10000001], lst[M], nr = 0, k, r = 0;
char s[10000001];
char x[21];
long long val[10000001];
void adauga( long long int v )
{
int r = v % M;
nr++;
val[nr] = v;
urm[nr] = lst[r];
lst[r] = nr;
}
bool cauta( long long int v )
{
int p = lst[v % M];
while( p != 0 )
{
if ( val[p] == v )
return true;
p = urm[p];
}
return false;
}
long long cod( char *p )
{
int i;
long long c = 0;
for ( i = 0; i < k; i++ )
c = c*3 + ( p[i] - 'a' );
return c;
}
long long putere( int v )
{
long long q = 1;
for ( int i = 1; i < v; i++ )
q = q*3;
return q;
}
int main()
{
int q = 0, n = 0, m = 0;
long long co, p3;
in.get(s,10000001, '\n');
in.get();
n = strlen(s);
//in.get(x, 21, '\n');
//in.get();
in.get(x,21,'\n');
in.get();
k = strlen(x);
adauga(cod(x));
while( in.get(x,21,'\n') )
{
in.get();
co = cod(x);
if ( !cauta(co) )
{
adauga(co);
//out << co<<' ';
}
}
r = 0;
p3 = putere(k);
co = cod(s);
if ( cauta(co) )
r++;
//out <<'\n';
//out << co<<' ';
for ( int i = 1; i + k <= n; i++ )
{
co = co%p3 *3 + (s[i+k-1] - 'a');
//out << co <<' ';
if ( cauta(co) )
r++;
}
out << r;
/*while ( in.get(x, 21, '\n') )
{
in.get();
cuv[m] = cod(x, 0);
m++;
}
for ( int i = 0; i <= n-3; i++ )
{
adauga( cod(s, i) );
}
for ( int i = 0; i < m; i++ )
cauta(cuv[i]);
out << r;*/
return 0;
}