Cod sursa(job #1481481)

Utilizator mirupetPetcan Miruna mirupet Data 4 septembrie 2015 16:46:23
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<cstdio>
#include<vector>
#include<cstring>
#define MOD 666013
using namespace std;

long long nr, i, a, SOL;
long long v[250], w[23];
char S[10000003], T[21];
vector < long long > Hash[MOD + 3];

inline bool Search(long long);
int main()
    {
        freopen("abc2.in","r",stdin);
        freopen("abc2.out","w",stdout);

        gets(S);

        w[1] = 1;
        for (i = 2; i <= 20; i++)
            w[i] = w[i - 1] * 3;

        v['a'] = 0, v['b'] = 1, v['c'] = 2;

        while (gets(T))
        {
            nr = strlen(T);

            a = 0;
            for (i = 0; i < nr; i++)
                a += w[i + 1] * v[T[i]];
            Hash[a % MOD].push_back(a);
        }

        a = 0;
        for (i = 0; i < nr; i++)
            a += w[i + 1] * v[S[i]];

        SOL = Search(a);

        for (i = nr; i < strlen(S); i++)
        {
            a /= 3;
            a += w[nr] * v[S[i]];
            SOL += Search(a);
        }

        printf("%d\n", SOL);
    }

inline bool Search(long long Val)
{
    vector <long long> :: iterator it;
    int line = Val % MOD;
    for (it = Hash[line].begin(); it != Hash[line].end(); it++)
        if (*it = Val)
            return 1;
    return 0;
}