Cod sursa(job #2394937)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 2 aprilie 2019 09:23:14
Problema Lista lui Andrei Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <map>

const int MAXN = 1000 + 5,SIGMA = 30,MOD = 104659;

using namespace std;

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

int n,m,dp[MAXN][SIGMA];
bool bad[SIGMA][SIGMA];

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 inapoi = 'a'; inapoi <= 'z'; inapoi++){
                if(!bad[inapoi - 'a'][j - 'a']){
                    dp[i][j - 'a'] += dp[i - 1][inapoi - 'a'];
                    dp[i][j - 'a'] %= MOD;
                }
            }
            cout<<j<<":"<<dp[i][j - 'a']<<endl;
        }
    }
    int ans = 0;
    for(char i = 'a'; i <= 'z'; i++){
        ans += dp[n][i - 'a'];
        ans %= MOD;
    }
    out<<ans;
    return 0;
}