Cod sursa(job #1851321)

Utilizator Coroian_DavidCoroian David Coroian_David Data 19 ianuarie 2017 17:06:20
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>

#define LITERE 26

#define MOD 104659

using namespace std;

FILE *f, *g;

int n, m;

bool ap[30][30];

int dp[1001][30];

int rez;

void readFile()
{
    f = fopen("nrcuv.in", "r");

    fscanf(f, "%d%d\n", &n, &m);

    int i;
    char a, b;
    for(i = 1; i <= m; i ++)
    {
       fscanf(f, "%c %c\n", &a, &b);

       a -= 'a';
       a ++;

       b -= 'a';
       b ++;

       ap[a][b] = ap[b][a] = 1;
    }

    fclose(f);
}

void solve()
{
    int i, j;

    for(i = 1; i <= LITERE; i ++)
        dp[1][i] = 1;

    int h;
    for(i = 2; i <= n; i ++)
    {
        for(j = 1; j <= LITERE; j ++)
        {
            for(h = 1; h <= LITERE; h ++)
            {
                if(ap[h][j] == 0)
                    dp[i][j] += dp[i - 1][h];

                dp[i][j] %= MOD;
            }
        }
    }

    for(i = 1; i <= LITERE; i ++)
        rez += dp[n][i], rez %= MOD;
}

void printFile()
{
    g = fopen("nrcuv.out", "w");

    fprintf(g, "%d\n", rez);

    fclose(g);
}

int main()
{
    readFile();

    solve();

    printFile();

    return 0;
}