Cod sursa(job #1680085)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 8 aprilie 2016 15:05:42
Problema Lista lui Andrei Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.99 kb
# include <stdio.h>
# include <stdlib.h>

# define MAX_N 2000

# define MOD 104659

int deny[128][128];
int p[MAX_N][128];

int pos( int n, char c ) {
    if ( p[n][(int)c] == -1 ) {
        if ( n > 1 ) {
            p[n][(int)c] = 0;

            int i;
            for ( i = 'a'; i <= 'z'; i ++ )
                if ( !deny[(int)c][(int)i] )
                    p[n][(int)c] += pos( n - 1, i );

            p[n][(int)c] %= MOD;
        } else
            p[n][(int)c] = 1;
    }

    return p[n][(int)c];
}

int main() {
    FILE *fin = fopen( "nrcuv.in", "r" ), *fout = fopen( "nrcuv.out", "w" );

    int n, m, i, j;
    char a, b;

    fscanf( fin, "%d%d", &n, &m );

    for ( i = 0; i < m; i ++ ) {
        fscanf( fin, " %c %c", &a, &b );
        deny[(int)a][(int)b] = deny[(int)b][(int)a] = 1;
    }

    for ( i = 0; i < MAX_N; i ++ )
        for ( j = 0; j < 128; j ++ )
            p[i][j] = -1;

    fprintf( fout, "%d", pos( n + 1, ' ' ) );

    fclose( fin );
    fclose( fout );

    return 0;
}