Cod sursa(job #1447361)

Utilizator cristinamateiCristina Matei cristinamatei Data 4 iunie 2015 10:12:01
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#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;
}