Cod sursa(job #1430370)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 8 mai 2015 11:53:06
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>

using namespace std;

#define inFile "nrcuv.in"
#define outFile "nrcuv.out"
#define MAX_N 1000
#define ALPHABET 26
#define MOD 104659

FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");

int D[MAX_N + 1][ALPHABET];
bool Adj[ALPHABET][ALPHABET];

int main() {
    int N, M, i, j, k;
    char C1, C2;

    fscanf(in, "%d %d\n", &N, &M);
    for(i = 1; i <= M; i++) {
        fscanf(in, "%c %c\n", &C1, &C2);
        Adj[C1-'a'][C2-'a'] = Adj[C2-'a'][C1-'a'] = 1;
    }

    /*for(i = 0; i < ALPHABET; i++) {
        for(j = 0; j < ALPHABET; j++) {
            fprintf(out, "%d", Adj[i][j]);
        }
        fprintf(out, "\n");
    }*/

    for(i = 0; i < ALPHABET; i++) D[1][i] = 1;
    for(i = 2; i <= N; i++) {
        for(j = 0; j < ALPHABET; j++) {
            for(k = 0; k < ALPHABET; k++) {
                if(!Adj[j][k]) {
                    D[i][j] += D[i-1][k];
                }
            }
            D[i][j] %= MOD;
        }
    }

    int Ans = 0;
    for(i = 0; i < ALPHABET; i++)
        Ans += D[N][i];

    fprintf(out, "%d\n", Ans % MOD);

    fclose(in);
    fclose(out);

    return 0;
}