Cod sursa(job #1770581)

Utilizator preda.andreiPreda Andrei preda.andrei Data 4 octombrie 2016 16:40:39
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <vector>

using namespace std;

const int kMod = 104659;

int main()
{
    ifstream fin("nrcuv.in");
    ofstream fout("nrcuv.out");

    int n, m;
    fin >> n >> m;

    vector<vector<bool>> vecini(26, vector<bool>(26, true));
    while (m--) {
        char a, b;
        fin >> a >> b;
        vecini[a - 'a'][b - 'a'] = vecini[b - 'a'][a - 'a'] = false;
    }

    vector<vector<int>> nr_cuv(n + 1, vector<int>(26, 0));
    nr_cuv[1] = vector<int>(26, 1);

    for (int i = 2; i <= n; ++i) {
        for (char c = 'a'; c <= 'z'; ++c) {
            for (char vec = 'a'; vec <= 'z'; ++vec)
                if (vecini[c - 'a'][vec - 'a'])
                    nr_cuv[i][c - 'a'] += nr_cuv[i - 1][vec - 'a'] % kMod;
        }
    }

    int rezultat = 0;
    for (char c = 'a'; c <= 'z'; ++c)
        rezultat += nr_cuv[n][c - 'a'] % kMod;

    fout << rezultat % kMod << "\n";
    return 0;
}