Cod sursa(job #1786247)

Utilizator tudortarniceruTudor Tarniceru tudortarniceru Data 22 octombrie 2016 17:15:57
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
const long long prim = 2000003;
int l, sol;
char a[10000005];
char c[25];
vector<long long> v[prim + 5];
long long convert(char s[25], int l) {
    long long sc = 0;
    int b = 1;
    for (int i = l - 1; i >= 0; --i) {
        if (s[i] == 'a') {
            sc += 1 * b;
        }
        else if (s[i] == 'b') {
            sc += 2 * b;
        }
        else {
            sc += 3 * b;
        }
        b *= 4;
    }
    return sc;
}
int main() {
    fin >> a;
    char s[25];
    while (fin >> s) {
        l = strlen(s);
        long long rez = convert(s, l);
        int r = rez % prim;
        int var = 0;
        for (int i = 0; i < v[r].size(); ++i) {
            if (v[r][i] == rez) {
                var = 1;
                i = v[r].size() + 10;
            }
        }
        if (var == 0) {
            v[r].push_back(rez);
        }
    }
    int n = strlen(a);
    for (int i = 0; i < l - 1; ++i) {
        c[i + 1] = a[i];
    }
    for (int i = l - 1; i < n; ++i) {
        for (int j = 1; j < l; ++j) {
            c[j - 1] = c[j];
        }
        c[l - 1] = a[i];
        long long rez = convert(c, l);
        int r = rez % prim;
        int var = 0;
        for (int i = 0; i < v[r].size(); ++i) {
            if (v[r][i] == rez) {
                var = 1;
            }
        }

        if (var == 1) {
            sol++;
        }
    }
    fout << sol;
    return 0;
    fout.close();
}