Cod sursa(job #2871573)

Utilizator darisavuSavu Daria darisavu Data 15 martie 2022 09:26:56
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#define mod1 1000000007
#define mod2 1000000013
#define prim1 31
#define prim2 37
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
unsigned long long hashm1,hashm2,p1=1,p2=1,hash1,hash2,poz;
int sa,sb,i;
string s,d;
map<long long,int>m1,m2;
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]++;
        m2[hash2]++;
    }
    for(i=1; i<sb; i++)
    {
        p1=(p1*prim1)%mod1;
        p2=(p2*prim2)%mod2;
    }
    for(i=0;i<sb;i++)
    {
        hashm1=((hashm1*prim1)%mod1+s[i])%mod1;
        hashm2=((hashm2*prim2)%mod2+s[i])%mod2;

    }
    if(m1[hashm1]!=0&&m2[hashm2]!=0) 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]!=0&&m2[hashm2]!=0) poz++;
    }
    g<<poz;
    return 0;
}