Cod sursa(job #1766247)

Utilizator liviu23Liviu Andrei liviu23 Data 27 septembrie 2016 19:11:41
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <string.h>
#include <set>
#include <string.h>
#define M 667013
using namespace std;

char s[10000010],c[30];
unsigned n,len,p[30],h,ans;
set<int> t[M];

int main()
{
    ifstream fin("abc2.in");
    ofstream fout("abc2.out");
    p[0]=1;
    for(unsigned i=1;i<=20;i++)
        p[i]=p[i-1]*3;
    fin>>s;
    n=strlen(s);
    while(fin>>c) {
        if(!len) len=strlen(c);
        h=0;
        for(unsigned i=0;i<len;i++)
            h+=p[i]*(c[i]-'a');
        t[h%M].insert(h);
    }
    h=0;
    for(unsigned i=0;i<len;i++)
        h+=p[i]*(s[i]-'a');
    if(t[h%M].find(h)!=t[h%M].end())
        ans++;
    for(unsigned i=len;i<n;i++) {
        h/=3;
        h+=p[len-1]*(s[i]-'a');
        if(t[h%M].find(h)!=t[h%M].end())
            ans++;
    }
    fout<<ans;
    return 0;
}