Cod sursa(job #1534591)

Utilizator andrei_r_97Radoi Andrei andrei_r_97 Data 23 noiembrie 2015 20:19:32
Problema Lista lui Andrei Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>

#define SIGMA 26
#define MAX_N 1000
#define MOD 104659

int restrictie[SIGMA][SIGMA];
int cuvinte[MAX_N][SIGMA];

void calcCuvinte(int n) {
  int i, j, k;

  for (i = 0; i < SIGMA; i++)
    cuvinte[0][i] = 1;

  for (i = 1; i < n; i++)
  for (j = 0; j < SIGMA; j++)
  for (k = 0; k < SIGMA; k++)
    if (!restrictie[k][j]) {
      cuvinte[i][j] += cuvinte[i - 1][k];
      cuvinte[i][j] %= MOD;
    }

}

void printAns(int n, FILE *out) {
  int ans = 0, i;

  for (i = 0; i < SIGMA; i++) {
    ans += cuvinte[n - 1][i];
    ans %= MOD;
  }
  fprintf(out, "%d\n", ans);
}

int main() {
  int n, m, i;
  char a, b;
  FILE *in, *out;

  in = fopen("nrcuv.in", "r");
  fscanf(in, "%d %d", &n, &m);
  fgetc(in);

  for (i = 1; i <= m; i++) {
    a = fgetc(in);
    fgetc(in);
    b = fgetc(in);
    fgetc(in);

    restrictie[a - 'a'][b - 'a'] = 1;
    restrictie[b - 'a'][a - 'a'] = 1;
  }
  fclose(in);

  calcCuvinte(n);
  out = fopen("nrcuv.out", "w");
  printAns(n, out);
  fclose(out);

  return 0;
}