Cod sursa(job #2554221)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 22 februarie 2020 17:55:44
Problema Lista lui Andrei Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <ctype.h>
#define NL 26
#define M 104659
#define N 1000

char m[NL + 1][NL + 1];
int d[N + 1][NL + 1];

char nextChar( FILE *fin ) {
  char ch;
  while ( isspace( ch = fgetc( fin ) ) );
  return ch;
}

int main() {
  FILE *fin, *fout;
  int n, k, i, l1, l2, j, sum;
  fin = fopen( "nrcuv.in", "r" );
  fscanf( fin, "%d%d", &n, &k );
  for ( i = 0; i < k; i ++ ) {
    l1 = nextChar( fin ) - 'a' + 1;
    l2 = nextChar( fin ) - 'a' + 1;
    m[l1][l2] = m[l2][l1] = 1;
  }
  fclose( fin );

  for ( i = 1; i <= NL; i ++ )
    d[1][i] = 1;
  for ( i = 2; i <= n; i ++ ) {
    for ( j = 1; j <= NL; j ++ ) {
      sum = 0;
      for ( k = 1; k <= NL; k ++ ) {
        if ( m[j][k] == 0 )
          sum = ( sum + d[i - 1][k] ) % M;
      }
      d[i][j] = sum;
    }
  }

  fout = fopen( "nrcuv.out", "w" );
  sum = 0;
  for ( i = 1; i <= NL; i ++ )
    sum = ( sum + d[n][i] ) % M;
  fprintf( fout, "%d\n", sum );
  fclose( fout );
  return 0;
}