Cod sursa(job #3230169)

Utilizator horia.boeriuBoeriu Horia Andrei horia.boeriu Data 19 mai 2024 17:12:36
Problema Lista lui Andrei Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>
#define NRL 26
#define MOD 104659
int dp[NRL], v[NRL];//in dp[i] este numarul de cuvinte care se termina cu litera i
char f[NRL][NRL];
int main()
{
    FILE *fin, *fout;
    int n, m, i, j, k, nr;
    char ch, ch1;
    fin = fopen("nrcuv.in", "r");
    fscanf(fin, "%d%d ", &n, &m);
    for (i = 0; i < m; i++) {
        ch = fgetc(fin) - 'a';
        fgetc(fin);
        ch1 = fgetc(fin) - 'a';
        fgetc(fin);
        f[ch][ch1] = f[ch1][ch] = 1;
    }
    fclose(fin);
    for (i = 0; i < NRL; i++) {
        dp[i] = 1;
    }
    for (i = 2; i <= n; i++) {
        for (j = 0; j < NRL; j++) {
            for (k = 0; k < NRL; k++) {
                if (f[k][j] == 0) {//ultima litera este j si penultima este k
                    v[j] += dp[k];
                }
            }
        }

        for (j = 0; j < NRL; j++) {
            dp[j] = v[j] % MOD;
            v[j] = 0;
        }
    }
    nr = 0;
    for (i = 0; i < NRL; i++) {
        nr = (nr + dp[i]) % MOD;
    }
    fout = fopen("nrcuv.out", "w");
    fprintf(fout, "%d\n", nr);
    fclose(fout);
    return 0;
}