Cod sursa(job #1447380)

Utilizator cristinamateiCristina Matei cristinamatei Data 4 iunie 2015 10:50:48
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 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] - '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<<' ';
        }
    }
    return 0;
    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;
}