Cod sursa(job #3298010)

Utilizator EricDimiCismaru Eric-Dimitrie EricDimi Data 25 mai 2025 21:53:46
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 104659;
const int SIGMA = 26;

const int MAX_N = 1'000;

bool c[SIGMA + 1][SIGMA + 1];
int dp[MAX_N + 1][SIGMA + 1];

int n, m;
char l1, l2;

/// dp[i][j] - numarul de cuvinte de lungime i care se termina cu litera j

int main() {
    f >> n >> m; 
    f.get();
    
    for (int i = 0; i < SIGMA; i++)
        dp[1][i] = 1;
    
    while (m--) {
        f >> l1; 
        f.get();
        f >> l2; 
        f.get();
        c[l1 - 'a'][l2 - 'a'] = c[l2 - 'a'][l1 - 'a'] = 1;
    }
    
    for (int i = 2; i <= n; i++)
        for (int j = 0; j < SIGMA; j++)
            for (int l = 0; l < SIGMA; l++)
                if (!c[l][j])
                    dp[i][j] = (dp[i][j] + dp[i - 1][l]) % MOD;
    
    dp[0][0] = 0;
    for (int i = 0; i < SIGMA; i++)
        dp[0][0] = (dp[0][0] + dp[n][i]) % MOD;
        
    g << dp[0][0] << "\n";
    
    f.close();
    g.close();
    return 0;
}