Cod sursa(job #1831894)

Utilizator gorneanu.andreiFMI Gorneanu Andrei gorneanu.andrei Data 18 decembrie 2016 23:20:01
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <string.h>
#define MAXT 10000009
#define MAXC 25
#define MOD 200003
using namespace std;
char sir[MAXT];
vector<int> v[MOD];

int hashFunc(char cuv[MAXC]){

    int a = 3, i, len;
    int h = 0;
    len = strlen(cuv);

    for(i = 1;i < len; ++i){
        h = h + (int)((cuv[i] - 'a') * a);
        a = a * a;
    }

    return h;
}

int main(){

    char cuv[MAXC],aux[MAXC];
    fstream f("abc2.in",ios::in);
    fstream g("abc2.out",ios::out);
    f.getline(sir,MAXT,'\n');
    int i, len, total = 0, l, m, y, x, j, q;

    f.getline(cuv,MAXC,'\n');
    l = strlen(cuv);

    len = strlen(sir);

    for(i = 0;i <= len - l; ++i){
        strcpy(aux,"");
        strncpy(aux,sir + i,l);
        aux[l] = '\0';

        x = hashFunc(aux);
        v[x % MOD].push_back(x);
    }

    x = hashFunc(cuv);
    m = v[x % MOD].size();
    y = x % MOD;

    for(i = 0;i < m; ++i)
        if(v[y][i] == x){
            ++total;
            break;
        }
    /*
    while(f.getline(cuv,MAXC,'\n')){
        x = hashFunc(cuv);
        m = v[x % MOD].size();
        y = x % MOD;
        for(i = 0;i < m; ++i)
        if(v[y][i] == x){
            ++total;
            v[y][i] = -1;
            break;
        }
    }
*/
    g << total;

}