Cod sursa(job #798163)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 15 octombrie 2012 20:48:31
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <vector>
#include <string>
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
#define LE  50600
#define MOD 66013
string sir;
string cuv[LE];
long long   num[LE];
vector<long long > H[MOD];
void Push(int value)
{
    int R=value%MOD;
    H[R].push_back(value);
}
bool find(int value)
{
    int R=value%MOD;
    int N=H[R].size();

    for(int I=0; I<N; ++I)
        if (H[R][I]==value)
            return true;

    return false;
}

int K,n,i,j;
int Div;
int val;


int main()
{
    f>>sir;

    while (f>>cuv[++K]);
    K--;

    int m=cuv[1].length();

    for(i=1; i<=K; ++i)
    {
        for(j=0; j<m; ++j)
        {
            num[i]=num[i]*3;


            if(cuv[i][j]=='b')
                num[i]++;

            if (cuv[i][j]=='c')
                num[i]+=2;
        }
        if (find(num[i])==false)
            Push(num[i]);
    }

    int n=sir.length();

    Div=1;

    for(i=1; i<m; ++i)
        Div*=3;
    int sol=0;

    for(i=0; i<m; ++i)
            val=val*3+(sir[i]-'a');


    if (find(val)==true)
        ++sol;

    for(i=m; i<n; ++i)
    {
        val=(val-(sir[i-m]-'a')*Div)*3+(sir[i]-'a');
        if (find(val)==true)
            ++sol;
    }
g<<sol<<'\n';
    f.close();
    g.close();
    return 0;
}