Cod sursa(job #1997526)

Utilizator refugiatBoni Daniel Stefan refugiat Data 4 iulie 2017 17:22:51
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <string>
#define MOD 666013
using namespace std;
ifstream si("abc2.in");
ofstream so("abc2.out");
bool h[MOD+1];

int main()
{
    string s;
    si>>s;
    string x;
    int n;
    while(1)
    {
        if(si.eof())
            break;
        si>>x;
        n=x.size();
        int cod=0;
        for(int i=0;i<n;++i)
        {
            cod=(cod*3+x[i]-'a')%MOD;
        }
        h[cod]=1;
    }
    int m=s.size(),cod=0;

    for(int i=0;i<n;++i)
    {
        cod=(cod*3+s[i]-'a')%MOD;
    }
    int p3=1;
    for(int i=1;i<n;++i)
    {
        p3=(p3*3)%MOD;
    }
    //cout<<cod;
    int cont=0;
    if(h[cod])
    {
        ++cont;
        //cout<<0<<' ';
    }
    for(int i=n;i<m;++i)
    {
        //cout<<(cod-(p3*(s[i-n]-'a'))%MOD+MOD)%MOD<<'\n';;
        cod=((cod-(p3*(s[i-n]-'a'))%MOD+MOD)*3+s[i]-'a')%MOD;

        if(h[cod])
        {
            //cout<<i-n+1<<' ';
            ++cont;
        }
    }
    so<<cont;
    return 0;
}