Cod sursa(job #3160245)

Utilizator Darius_CDarius Chitu Darius_C Data 23 octombrie 2023 14:56:59
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#define MAXN 1006
#define DIM 30
#define MOD 104659
std::ifstream fin("nrcuv.in");
std::ofstream fout("nrcuv.out");
using namespace std;

int N,M;
int dp[MAXN][DIM]; /// dp[i][ch-'a']= nr litere de lungime i ce se termina in caracterul ch
bool permission[DIM][DIM];

void Read()
{
    fin>>N>>M;
    for(char c1='a';c1<='z';c1++)
        for(char c2='a';c2<='z';c2++)
            permission[c1-'a'][c2-'a']=true;
    for(char c1,c2;M--;) {
        fin>>c1>>c2;
        permission[c1-'a'][c2-'a']=false;
        permission[c2-'a'][c1-'a']=false;
    }
}

void Dinamica()
{
    for(char ch='a';ch<='z';ch++)
        dp[1][ch-'a']=1;
    for(int i=2;i<=N;i++)
        for(char cnext='a';cnext<='z';cnext++)
            for(char ch='a';ch<='z';ch++)
                dp[i][cnext-'a']=(dp[i][cnext-'a'] + permission[ch-'a'][cnext-'a']*dp[i-1][ch-'a'])%MOD;

    int ans=0;
    for(char ch='a';ch<='z';ch++)
        ans=(ans + dp[N][ch-'a'])%MOD;
    fout<<ans;
}

int main()
{
    Read();
    Dinamica();
    return 0;
}