Cod sursa(job #1740891)

Utilizator Lungu007Lungu Ionut Lungu007 Data 12 august 2016 14:21:47
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#define MOD 666013
#define MOD1 100007
#define NMAX  10000002
#define CMAX 21
#define DMAX 50001
using namespace std;

ifstream in("abc2.in");
ofstream out("abc2.out");

char s[NMAX];
char q[CMAX],r[DMAX][CMAX];
unsigned int m1[MOD];
unsigned int x,a[NMAX],d1[DMAX],coresp[MOD+5],c,n,p,cuv,p1=1,p2=1,h1,h2,contor;

int verf(int i,int st,int dr)
{
    for(int j=st;j<=dr;j++)
    {
        if(r[i][j-st]!=s[j])
        {
            return 0;
        }

    }
     return 1;
}

int main()
{
    in >> s;
    int b = 4;
    for(n=0;s[n]!='\0';n++)
    {
        a[n] = s[n]-'a'+1;
    }

    while(in >> r[c])
    {

        for(cuv=0;r[c][cuv]!='\0';cuv++)
        {
            //cout << p << " ";
            d1[c] = (d1[c]*b+(r[c][cuv]-'a'+1))%MOD;
        }
        coresp[d1[c]] = c+1;
        c++;
    }
    for(int i=0;i<cuv;i++)
    {
        h1 = (h1*b + a[i])%MOD;
        p1 = (b*p1)%MOD;
    }
    p1 /=b;

    int st,dr;

     if(coresp[h1]>0)
        {
            dr = cuv-1;
            st = dr-cuv+1;
            contor+=verf(coresp[h1]-1,st,dr);
        }

    for(int i=cuv;i<n;i++)
    {
        h1 = ((h1-(h1/p1)*p1+MOD)*b+ a[i])%MOD;
        if(coresp[h1]>0)
        {

            dr = i;
            st = dr-cuv+1;
            contor+=verf(coresp[h1]-1,st,dr);
        }

    }


    out << contor;
    return 0;
}