Cod sursa(job #1663092)

Utilizator AndreiFlorescuAndrei Florescu AndreiFlorescu Data 25 martie 2016 15:29:03
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <map>
#include <cstring>
#include <string>

using namespace std;

typedef struct {
    string sir;
} strng;

bitset <37> cuv[37][37][37][37];
strng penta[50001];
int sol[50001][2];

map <string, bool> harta;
map <string, bool>:: iterator it;

int cod (char c) {
    if (c >= '0' && c <= '9') {
        return c - '0';
    } else {
        return c - 'a' + 10;
    }
}

int main() {
    ifstream file_in ("pentagrame.in");
    ofstream file_out ("pentagrame.out");

    char sir[31];
    char temp[6];
    int i, n, m, poz, l, j, cntr = 0, maxim = 0;

    file_in >> n >> m;

    for (i = 0; i < n; i++) {
        file_in >> temp;
        harta[temp] = 0;
        cuv[cod(temp[0])][cod(temp[1])][cod(temp[2])][cod(temp[3])][cod(temp[4])] = 1;
    }

    for (it = harta.begin(); it != harta.end(); it++) {
        penta[cntr++].sir = it->first;
    }

    for (i = 1; i <= m; i++) {
        file_in >> sir;
        l = strlen(sir);
        for (poz = 4; poz < l; poz++) {
            for (j = 0; j < n; j++) {
                cout << cod(penta[j].sir[0]) << cod(penta[j].sir[1]) << cod(penta[j].sir[2]) << cod(penta[j].sir[3]) << cod(penta[j].sir[4]) << "\n";
                if (cuv[cod(sir[poz - 4])][cod(sir[poz - 3])][cod(sir[poz - 2])][cod(sir[poz - 1])][cod(sir[poz])] == 1) {
                    if (sol[j][1] != i) {
                        sol[j][0]++;
                        sol[j][1] = i;
                    }
                }
            }
        }
    }

    for (i = 0; i < n; i++) {
        if (sol[i][0] > maxim) {
            maxim = sol[i][0];
        }
    }
    file_out << maxim << "\n";

    for (i = 0; i < n; i++) {
        if (sol[i][0] == maxim) {
            file_out << penta[i].sir << "\n";
        }
    }

    return 0;
}