Cod sursa(job #1849900)

Utilizator tudi98Cozma Tudor tudi98 Data 17 ianuarie 2017 22:33:27
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
using namespace std;

const int Mod = 104659;

bool can[26][26];
int dp[1001][26];

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

    int n,m;
    fill_n(can[0],26*26,1);

    fin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        char a,b;
        fin >> a >> b;
        can[a-'a'][b-'a'] = 0;
        can[b-'a'][a-'a'] = 0;
    }

    for (int i = 0; i < 26; i++) dp[1][i] = 1;

    for (int i = 2; i <= n; i++)
        for (int j = 0; j < 26; j++)
            for (int k = 0; k < 26; k++)
            {
                if (!can[j][k]) continue;
                dp[i][k] += dp[i-1][j];
                if (dp[i][k] >= Mod) dp[i][k] -= Mod;
            }

    int Sol = 0;
    for (int i = 0; i < 26; i++)
    {
        Sol += dp[n][i];
        if (Sol >= Mod) Sol -= Mod;
    }

    fout << Sol;

}