Cod sursa(job #1465720)

Utilizator theep0Cruceru Radu theep0 Data 27 iulie 2015 22:05:26
Problema Lista lui Andrei Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
  
#define MOD 104659
#define S 0
#define E 25
  
unsigned long long dp[1001][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);
  
    initdp();
    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[1][c] = 1;
    }
    for (i = 2; i <= n; i++) {
        for (c = S; c <= E; c++) {
            for(k = S; k <= E; k++) {
                if (invalid[k][c] == 0) {
                    dp[i][c] = dp[i - 1][k];
                }
                dp[i][c] %= MOD;
            }
        }
    }
    s = 0;
    for (i = S; i <= E; i++) {
        s += dp[n][i];
        s %= MOD;
    }
    printf("%lu\n", s);
    fclose(fi);
    fclose(fo);
    return 0;
}