Cod sursa(job #1466175)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 28 iulie 2015 18:43:34
Problema Lista lui Andrei Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <string.h>

#define MAX_LEN 1000
#define MOD 104659
#define SIGMA 26

char invalid[SIGMA][SIGMA];
int d[MAX_LEN][SIGMA]; // d[i][j] = numarul de siruri de lungime i care se termina in j

int main(void) {
  FILE *f = fopen("nrcuv.in", "r");
  int n, m;
  int i, j;
  char a, b;

  fscanf(f, "%d%d", &n, &m);
  for (i = 0; i < m; i++) {
    fscanf(f, "\n%c %c", &a, &b);
    invalid[a - 'a'][b - 'a'] = invalid[b - 'a'][a - 'a'] = 1;
  }
  fclose(f);

  for (a = 0; a < SIGMA; a++) {
    d[0][a] = 1;
  }
  for (i = 1; i < n; i++) {
    for (a = 0; a < SIGMA; a++) {
      for (b = 0; b < SIGMA; b++) {
        if (!invalid[a][b]) {
          d[i][a] += d[i - 1][b];
          d[i][a] %= MOD;
        }
      }
    }
  }
  i = 0;
  for (a = 0; a < SIGMA; a++) {
    i += d[n - 1][a];
    i %= MOD;
  }
  f = fopen("nrcuv.out", "w");
  fprintf(f, "%d\n", i);
  fclose(f);
  return 0;
}