Cod sursa(job #1447370)

Utilizator cristinamateiCristina Matei cristinamatei Data 4 iunie 2015 10:28:16
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 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, 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;
}