Cod sursa(job #1850912)

Utilizator d0rina2011Craciun Dorina d0rina2011 Data 19 ianuarie 2017 00:58:05
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include<bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <vector>
#define M 666013

using namespace std;

ifstream fin("abc2.in");
ofstream fout("abc2.out");

vector <unsigned int> h[M];
char s[10000001], cuv[50001];
int v[25];//puterile lui 3

int caut(long long x){
    long long  y = x % M, i, ss = h[y].size();
    for(i = 0; i < ss; ++i){
        if(h[y][i] == x) return 1;
    }
    return 0;
}

int main()
{
    long long i;
    unsigned n, n1 = 0, aux, nr = 0;
    fin>>s;
    //fin>>cuv;
    n = strlen(s);
    //n1 = strlen(cuv);
    v[0] = 1;
    for(i = 1; i <= 24; i++)
        v[i] = v[i - 1] * 3;
   /* aux = 0;
    for(i = 0; i < n1; ++i){
        aux += v[i] * (cuv[i] - 'a');
    }
    if(caut(aux) == 0){
            h[aux % M].push_back(aux);
    }
*/
    while(fin>>cuv){
        if(!n1) n1 = strlen(cuv);
        aux = 0;
        for(i = 0; i < n1; ++i){
            aux += v[i] * (cuv[i] - 'a');
        }
        //if(caut(aux) == 0){
            h[aux % M].push_back(aux);
        //}
    }

    aux = 0;
    for(i = 0; i < n1; ++i){
        aux += v[i] * (s[i] - 'a');
    }
    nr += caut(aux);
    for(i = n1; i < n; i++){
        aux /= 3;
        aux += v[n1 - 1] * (s[i] - 'a');
        nr += caut(aux);
    }
    fout<<nr;
    return 0;
}