Cod sursa(job #2395112)

Utilizator mariaghinescu22Ghinescu Maria mariaghinescu22 Data 2 aprilie 2019 11:17:07
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N=1001, M=26, MOD=104659;
int n, m, dp[N][M];    //d[i][j]=nr. de cuvinte de lungime i care se termina cu a j-a litera
bool bad[M][M];

int main(){
    in>>n>>m;
    for(int i=1; i<=m; i++){
        char a, b;
        in>>a>>b;
        bad[a-'a'][b-'a']=true;
        bad[b-'a'][a-'a']=true;
    }
    for(int i='a'; i<='z'; i++){
        dp[1][i-'a']=1;
    }
    for(int i=2; i<=n; i++){
        for(char j='a'; j<='z'; j++){
            for(char anterior='a'; anterior<='z'; anterior++){
                if(!bad[anterior-'a'][j-'a']){
                    dp[i][j-'a']+=dp[i-1][anterior-'a'];
                    dp[i][j-'a']%=MOD;
                }
            }
        }
    }
    int rez=0;
    for(char i='a'; i<='z'; i++){
        rez+=dp[n][i-'a'];
        rez%=MOD;
    }
    out<<rez;
    return 0;
}