Cod sursa(job #2296803)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 5 decembrie 2018 00:46:15
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
#include<vector>
#include<cstring>
#include<set>
#define MOD 10000007
using namespace std;
char a[10000005],b[50005];
set<unsigned> Hash[MOD+1];
int n,m,k;
unsigned ans,code,p;
FILE *in=fopen("abc2.in","r");
FILE *out=fopen("abc2.out","w");
int main(){
    fgets(a,10000005,in);
    while(fgets(b,50005,in)){
        code=0;
        for(int i=0;i<strlen(b)-1;i++)
            code=code*3+(b[i]-'a');
        Hash[code%MOD].insert(code);
    }
    k=strlen(b)-1; p=1;
    for(int i=1;i<k;i++)
        p*=3;
    code=0;
    for(int i=0;i<k;i++)
        code=code*3+(a[i]-'a');
    ans+=Hash[code%MOD].count(code);

    for(int i=k;i<strlen(a)-1;i++){
        code=(code-(a[i-k]-'a')*p)*3+(a[i]-'a');
        ans+=Hash[code%MOD].count(code);
    }
    fprintf(out,"%d",ans);
}