Cod sursa(job #1850909)

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

using namespace std;

//ifstream fin("abc2.in");
//fstream fout("abc2.out");
FILE *f=fopen("abc2.in", "r");
FILE *g=fopen("abc2.out", "w");
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 = 1, aux, nr = 0;
    fscanf(f, "%s", s);
    fscanf(f, "%s", 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(!feof(f)){
        fscanf(f, "%s", 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;
    fprintf(g, "%d", nr);
    return 0;
}