Cod sursa(job #2173763)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 16 martie 2018 00:35:32
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>

const int MAXN = 1e3;
#define SIGMA 26
#define MOD 104659

bool r[SIGMA][SIGMA];
int d[MAXN + 1][SIGMA];

int main() {
  FILE *fin, *fout;
  int n, m, ans;
  char a, b;
  fin = fopen("nrcuv.in", "r");
  fscanf(fin, "%d%d ", &n, &m);
  for (int i = 0; i < m; ++i) {
    a = fgetc(fin);
    fgetc(fin);
    b = fgetc(fin);
    fgetc(fin);
    r[a - 'a'][b - 'a'] = r[b - 'a'][a - 'a'] = 1;
  }
  fclose(fin);
  for (int i = 0; i < SIGMA; ++i) {
    d[1][i] = 1;
  }
  for (int i = 2; i <= n; ++i) {
    for (int j = 0; j < SIGMA; ++j) {
      for (int k = 0; k < SIGMA; ++k) {
        if (!r[j][k]) {
          d[i][j] = (d[i][j] + d[i - 1][k]) % MOD;
        }
      }
    }
  }
  ans = 0;
  for (int i = 0; i < SIGMA; ++i) {
    ans = (ans + d[n][i]) % MOD;
  }
  fout = fopen("nrcuv.out", "w");
  fprintf(fout, "%d\n", ans);
  fclose(fout);
  return 0;
}