Cod sursa(job #2086896)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 12 decembrie 2017 17:40:34
Problema Lista lui Andrei Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <iostream>

using namespace std;

const int nmax = 1005;
const int mmax = 2005;
const int sigma = 30;
int n, m, sol, dp[nmax][sigma], restrict[sigma][sigma];
char a, b;

int main() {
  ifstream fi("nrcuv.in");
  ofstream fo("nrcuv.out");

  fi >> n >> m;
  for (int i = 1; i <= m; i++) {
    fi >> a >> b;
    restrict[a - 'a'][b - 'a'] = 1;
    restrict[b - 'a'][a - 'a'] = 1;
  }
  for (int j = 'a'; j <= 'z'; j++) dp[1][j - 'a'] = 1;

  for (int i = 2; i <= n; i++)
    for (int j = 'a'; j <= 'z'; j++)
      for (int k = 'a'; k <= 'z'; k++)
        if (!restrict[k - 'a'][j - 'a']) {
          dp[i][j - 'a'] += dp[i - 1][k - 'a'];
        }

  for (int j = 'a'; j <= 'z'; j++) sol += dp[n][j - 'a'];
  fo << sol << "\n";

  fi.close();
  fo.close();

  return 0;
}