Cod sursa(job #1306317)

Utilizator salam.bossSalam Valorosu salam.boss Data 30 decembrie 2014 20:44:10
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f ("nrcuv.in");
ofstream g ("nrcuv.out");

const int MOD = 104659, NMAX = 1000 + 1, LMAX = 26 + 1;

int n, m;
bool regula[LMAX][LMAX];
int dp[NMAX][LMAX];

void citeste() {
    char a, b;
    f >> n >> m;
    for (int i = 1; i <= m; i++) {
        f >> a >> b;
        regula[a - 'a' + 1][b - 'a' + 1] = true;
        regula[b - 'a' + 1][a - 'a' + 1] = true;
    }
}

void rezolva() {
    for (int i = 1; i <= LMAX; i++) dp[1][i] = 1;
    for (int i = 2; i <= n; i++)
        for (int a = 1; a < LMAX; a++)
            for (int b = 1; b < LMAX; b++)
                if (regula[a][b] == false) {
                    dp[i][a] = (dp[i - 1][b] + dp[i][a]) % MOD;
                }
    int sol = 0;
    for (int i = 1; i < LMAX; i++) sol = (sol + dp[n][i]) % MOD;
    g << sol << '\n';
}

int main() {
    citeste();
    rezolva();
    return 0;
}