Pagini recente » Monitorul de evaluare | Cod sursa (job #141250) | Cod sursa (job #1272429) | Cod sursa (job #1490012) | Cod sursa (job #1447361)
#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, cuv[50001], k, r = 0;
char s[10000001];
char x[21];
bool t[10000001];
long long val[10000001];
void adauga( long long int x )
{
int r = x % M;
nr++;
val[nr] = x;
urm[nr] = lst[r];
lst[r] = nr;
}
void cauta( long long int x )
{
int p = lst[x % M];
while( p != 0 )
{
if ( val[p] == x && t[p] == false )
{
r++;
t[p] = true;
}
p = urm[p];
}
}
long long cod( char *p, int poz )
{
int i;
long long c = 0;
for ( i = 0; i < k; i++ )
c = c*3 + ( p[i+poz] - '0' );
return c;
}
int main()
{
int q = 0, n = 0, m = 0;
in.get(s,10000001, '\n');
in.get();
n = strlen(s);
in.get(x, 21, '\n');
in.get();
k = strlen(x);
cuv[m] = cod(x, 0);
m++;
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;
}