Pagini recente » Cod sursa (job #441594) | Cod sursa (job #1492699) | Cod sursa (job #1601311) | Cod sursa (job #972136) | Cod sursa (job #1447370)
#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] - '0' );
return c;
}
int main()
{
int q = 0, n = 0, m = 0;
long long co;
in.get(s,10000001, '\n');
in.get();
n = strlen(s);
//in.get(x, 21, '\n');
//in.get();
in >> x;
k = strlen(x);
adauga(cod(x));
while( in >> x )
{
co = cod(x);
if ( !cauta(co) )
adauga(co);
}
r = 0;
for ( int i = 0; i+k <= n; i++ )
if ( cauta(cod(s+i) ) )
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;
}