Cod sursa(job #3281238)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 28 februarie 2025 18:43:15
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1000;  
const int MOD  = 104659;

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

int n, m;
int dp[NMAX+1][27]; //dp[i][j] cate cuvinte pot forma de lungime i care se termina in caracterul char(j+'a')
char a, b;
int nu[27][27];

int main()
{
    fin >> n >> m;
    for(int i=1; i<=m; i++)
    {
        fin >> a >> b;
        nu[a-'a'][b-'a'] = 1;
    }
    for(char a='a'; a<='z'; a++)
        dp[1][a-'a']=1;//pot forma un singur cuvant din fiecare litera
    for(int l=2; l<=n; l++)
    {
        for(char c='a'; c<='z'; c++)
            for(char c2='a'; c2<='z'; c2++)
                if(!nu[c2-'a'][c-'a'] && !nu[c-'a'][c2-'a'])
                    dp[l][c-'a']=1ll*(dp[l][c-'a']+dp[l-1][c2-'a'])%MOD;
    }
    int ans = 0;
    for(char c='a'; c<='z'; c++)
        ans=1ll*(ans+dp[n][c-'a'])%MOD;
    fout << ans;
    return 0;
}