Cod sursa(job #2295963)

Utilizator dragos99Homner Dragos dragos99 Data 4 decembrie 2018 01:37:21
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<fstream>
#include<cstring>
#include<vector>
#include<cstdlib>

using namespace std;
    FILE *f = freopen("abc2.in", "r", stdin);
    FILE *g = freopen("abc2.out", "w", stdout);

const long PRIM = 191507;
char text_mare[10000001], text_mic[21];
vector<long> Hash[PRIM];

inline long gaseste_valoarea(long x){
    long x_row = x % PRIM;
    for(long i = 0 ; i < Hash[x_row].size() ; i++){
        if(Hash[x_row][i] == x)
            return 1;
    }
    return 0;
}

int main()
{
scanf("%s", text_mare);
long lung1 = strlen(text_mare);
long lung2;
while(scanf("%s", text_mic) != EOF){
    lung2 = strlen(text_mic);
    long val = 0;
    for(long i = 0 ; i < lung2 ; i++){
        val = val * 3 + ((long)text_mic[i] - 'a');
    }
    Hash[val % PRIM].push_back(val);
}

long sol = 0;
long val = 0;
long putere = 1;

for(long i = 0 ; i < lung2 ; i++){
    val = val * 3 + ((long)text_mare[i] - 'a');
}

for(long i = 0 ; i < lung2 - 1 ; i++)
    putere *= 3;

sol += gaseste_valoarea(val);

for(long i = lung2 ; i < lung1 ; i++){
    val -= ((long)text_mare[i - lung2] - 'a') * putere;
    val = val * 3 + ((long)text_mare[i] - 'a');
    sol += gaseste_valoarea(val);
}

printf("%d", sol);

return 0;
}