Cod sursa(job #2836951)

Utilizator lolismekAlex Jerpelea lolismek Data 21 ianuarie 2022 11:47:44
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");

const int K = 26, N = 1000, buff = 10, mod = 104659;
int dp[N + buff][K + buff];
bool interzis[K + buff][K + buff];

int main(){
    int n, m;
    char ch;
    fin >> n >> m;
    fin.get(ch); /// '\n'
    while(m--){
        int a;
        fin.get(ch);
        a = ch - 'a' + 1;
        fin.get(ch); /// ' '
        fin.get(ch);
        interzis[a][ch - 'a' + 1] = true;
        interzis[ch - 'a' + 1][a] = true;
        fin.get(ch); /// '\n'
    }
    for(int i = 1; i <= K; i++) dp[1][i] = 1;
    for(int i = 2; i <= n; i++)
        for(int j = 1; j <= K; j++){
            for(int k = 1; k <= K; k++)
                if(!interzis[j][k])
                    (dp[i][j] += dp[i - 1][k]) %= mod;
    }
    int ans = 0;
    for(int i = 1; i <= K; i++) (ans += dp[n][i]) %= mod;
    fout << ans;
    return 0;
}