Cod sursa(job #1680068)

Utilizator cella.florescuCella Florescu cella.florescu Data 8 aprilie 2016 15:00:25
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#include <stdlib.h>
#define MOD 104659
#define MAXLIT 26
#define MAXN 1000

int dp[MAXN+1][MAXLIT], comb[MAXLIT][MAXLIT];

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