Cod sursa(job #2893939)

Utilizator MortemPlaiasu Iulia-Silvia Mortem Data 26 aprilie 2022 20:29:21
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <vector>
#define modu 104659
#define lol long long
#define LETTER_COUNT 'z' - 'a' + 1

using namespace std;

FILE *fin = fopen("nrcuv.in", "r");
FILE *fout = fopen("nrcuv.out", "w");

bool allowed[LETTER_COUNT][LETTER_COUNT];
lol dp[1005][LETTER_COUNT];

int main()
{
    int n, m;
    fscanf(fin, "%d %d\n", &n, &m);
    for (int i = 'a'; i <= 'z'; i++)
        for (int j = 'a'; j <= 'z'; j++)
            allowed[i - 'a'][j - 'a'] = true;
    for (int i = 0; i < m; i++)
    {
        char a, b;
        fscanf(fin, "%c %c\n", &a, &b);
        allowed[a - 'a'][b - 'a'] = false;
        allowed[b - 'a'][a - 'a'] = false;
    }
    for (int i = 'a'; i <= 'z'; i++)
        dp[1][i - 'a']++;
    for (int i = 1; i < n; i++)
        for (int j = 'a'; j <= 'z'; j++)
            for (int k = 'a'; k <= 'z'; k++)
                if (allowed[j - 'a'][k - 'a'])
                    dp[i + 1][k - 'a'] = (dp[i + 1][k - 'a'] + dp[i][j - 'a']) % modu;
    lol sum = 0;
    for (int i = 'a'; i <= 'z'; i++)
        sum = (sum + dp[n][i - 'a']) % modu;
    fprintf(fout, "%lld\n", sum);
}