Cod sursa(job #1456414)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 30 iunie 2015 17:02:38
Problema Lista lui Andrei Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>

#define FIN "nrcuv.in"
#define FOUT "nrcuv.out"
#define NR_LITERE 'z'-'a'+1
#define POZITIE(c) ((int)((c)-'a'))
#define LUNG_MAX 1000
#define MOD 104659
FILE *in, *out;

int N, M, solution;

bool perechi[NR_LITERE][NR_LITERE];
int din[LUNG_MAX][NR_LITERE];

void solve(){
    for(int i=0; i < NR_LITERE; i++){
        din[1][i] = 1;
    }

    for(int i=2; i <= N; i++){
        for(int j=0; j < NR_LITERE; j++){
            for(int k=0; k < NR_LITERE; k++){
                if(!perechi[j][k]){
                    din[i][j] = (din[i][j] + din[i-1][k]) % MOD;
                }
            }
        }
    }

    for(int i=0; i < NR_LITERE; i++){
        solution = (solution + din[N][i]) % MOD;
    }

}

int main(){
    in = fopen(FIN, "rt");
    out = fopen(FOUT, "wt");
    if(!in || !out) return 1;

    fscanf(in, "%d%d", &N, &M);
    for(int i=0; i < M; i++){
        char x, y, z, t;
        fscanf(in, "%c%c%c%c", &x, &y, &z, &t);

        perechi[POZITIE(y)][POZITIE(t)] = true;
        perechi[POZITIE(t)][POZITIE(y)] = true;
    }

    solve();
    fprintf(out, "%d", solution);

    fclose(in);
    fclose(out);
    return 0;
}