Cod sursa(job #2871586)

Utilizator darisavuSavu Daria darisavu Data 15 martie 2022 09:52:13
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
#define mod1 1000000007
#define mod2 1000000013
#define prim1 17
#define prim2 23
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
long long hashm1,hashm2,p1=1,p2=1,hash1,hash2,poz;
int sa,sb,i;
string s,d;
map<bool, map<long long,long long> >m1;
int main()
{
    f>>s;
    sa=s.size();
    while(f>>d)
    {
        sb=d.size();
        hash1=hash2=0;
        for(i=0; i<sb; i++)
        {
            hash1=((hash1*prim1)%mod1+d[i])%mod1;
            hash2=((hash2*prim2)%mod1+d[i])%mod2;
        }
        m1[hash1][hash2]=1;
    }
    for(i=0;i<sb;i++)
    {
        hashm1=((hashm1*prim1)%mod1+s[i])%mod1;
        hashm2=((hashm2*prim2)%mod2+s[i])%mod2;
        if(i>0)
        {
        p1=(p1*prim1)%mod1;
        p2=(p2*prim2)%mod2;
        }

    }
    if(m1[hashm1][hashm2]==1) poz++;
    for(i=sb;i<=sa;i++)
    {

        hashm1=((prim1*(hashm1-(((s[i-sb])*p1)%mod1)+mod1))%mod1+s[i])%mod1;
        hashm2=((prim2*(hashm2-(((s[i-sb])*p2)%mod2)+mod2))%mod2+s[i])%mod2;
        if(m1[hashm1][hashm2]==1) poz++;
    }
    g<<poz;
    return 0;
}