Cod sursa(job #1465697)

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