Cod sursa(job #1782428)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 18 octombrie 2016 09:22:38
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
using namespace std;
int m[30][30], d[1005][30];

int main()
{
    freopen("nrcuv.in", "r", stdin);
    freopen("nrcuv.out", "w", stdout);

    int n, kk, ans = 0;
    char a, b;
    scanf("%d %d\n", &n, &kk);

    for (int i = 1; i <= kk; ++i)
    {
        scanf("%c %c\n", &a, &b);
        m[a - 'a' + 1][b - 'a' + 1] = 1; /// dupa a nu poate veni b ///
        m[b - 'a' + 1][a - 'a' + 1] = 1;
    }

    for (int i = 1; i <= 26; ++i)
        d[1][i] = 1;

    for (int i = 2; i <= n; ++i)
        for (int j = 1; j <= 26; ++j)
            for (int k = 1; k <= 26; ++k)
                if (m[k][j] == 0) // se poate pune litera k dupa j
                    d[i][j] = (d[i][j] + d[i - 1][k]) % 104659;

    for (int i = 1; i <= 26; ++i)
        ans = (ans + d[n][i]) % 104659;
    printf("%d\n", ans);

    return 0;
}