Cod sursa(job #1476343)

Utilizator mihaiadelinamihai adelina mihaiadelina Data 24 august 2015 23:14:18
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin ("nrcuv.in");
ofstream fout ("nrcuv.out");
//dp[i][j] = numarul de siruri valide de lungime i care se termina in a j-a litera a alfabetului
//dp[1][i] = 1;
//dp[i][l1] += dp[i - 1][l2] daca v[i][l2] == false;
int dp[1001][27];
// v[i][j] = true daca a i-a si a j-a litera nu pot fi alaturate, altfel false
bool v[27][27];

int main() {
    int n, m, i, j, l1, l2, s;
    char a, b;

    fin >> n >> m;

    for (i = 0; i < m; ++i) {
        fin >> a >> b;
        v[a - 'a'][b - 'a'] = v[b - 'a'][a - 'a'] = true;
    }

    for (i = 0; i < 26; i++) {
        dp[1][i] = 1;
    }

    for (i = 2; i <= n; i++) {
        for (l1 = 0; l1 < 26; l1++) {
            for (l2 = 0; l2 < 26; l2++) {
                if (v[l1][l2] == false) {
                    dp[i][l1] += dp[i - 1][l2];
                    dp[i][l1] %= 104659;
                }
            }
        }
    }

    for (j = 0, s = 0; j < 26; j++) {
        s += dp[n][j];
        s %= 104659;
    }

    fout << s;
    return 0;
}