Cod sursa(job #1465731)

Utilizator theep0Cruceru Radu theep0 Data 27 iulie 2015 22:17:31
Problema Lista lui Andrei Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
  
#define MOD 104659
#define S 0
#define E 25
  
int dp[2][26];
unsigned short int invalid[26][26];
  
int main() {
    int n, k, i, c;
    char buf[8], c1, c2;
    unsigned long s = 0;
    FILE *fi, *fo;
    fi = freopen("nrcuv.in", "r", stdin);
    fo = freopen("nrcuv.out", "w", stdout);

    scanf("%d %d", &n, &k);
    fgets(buf, 8, stdin);
    for (i = 0; i < k; i++) {
        fgets(buf, 8, stdin);
        sscanf(buf, "%c %c", &c1, &c2);
        invalid[c1 - 'a'][c2 - 'a'] = 1;
        invalid[c2 - 'a'][c1 - 'a'] = 1;
    }
    for (c = S; c <= E; c++) {
        dp[0][c] = 1;
    }
    i = 0;
    while (n--) {
        i = 1 - i;
        for (c = S; c <= E; c++) {
            for (k = S; k <= E; k++) {
                if (invalid[c][k] == 0) {
                    dp[i][c] += dp[1 - i][k];
                }
            }
            dp[i][c] %= MOD;
        }
    }
    s = 0;
    for (c = S; c <= E; c++) {
        s += dp[1-i][c];
        s %= MOD;
    }
    printf("%lu\n", s);
    fclose(fi);
    fclose(fo);
    return 0;
}