Cod sursa(job #1845928)

Utilizator teoionescuIonescu Teodor teoionescu Data 11 ianuarie 2017 23:26:04
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<iostream>
#include<fstream>
#include<cstring>
#include<cstdlib>
#include<unordered_set>
using namespace std;
typedef long long ll;
ifstream in("abc2.in");
ofstream out("abc2.out");

const int Nmax = 10000001;
char s[Nmax],cuv[21];
int n,ans;
ll val,pw=1;
unordered_set<ll> W;

int main(){
    in.getline(s,Nmax);
    while(!in.eof()){
        in.getline(cuv,21);
        if(in.eof()) break;
        n=strlen(cuv);
        val=0;
        for(int i=0;i<n;i++) val = val*3 + cuv[i] - 'a';
        W.insert(val);
    }
    for(int i=1;i<n;i++) pw=pw*3;
    int sz=strlen(s);
    val=0;
    for(int i=0;i<min(n,sz);i++) val = val*3 + s[i] - 'a';
    for(int i=n;i<sz;i++){
        if(W.find(val)!=W.end()) ans++;
        val = (val-pw*(s[i-n]-'a'))*3 + s[i] - 'a';
    }
    if(W.find(val)!=W.end()) ans++;
    out<<ans<<'\n';
    return 0;
}