Cod sursa(job #2478616)

Utilizator marinaoprOprea Marina marinaopr Data 22 octombrie 2019 14:48:58
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>

#define MOD 104659

using namespace std;

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

int n,m,i,j,k,lin,dp[2][30],ans;
char c,c1,c2;
bool ok[30][30];

int main()
{
    fscanf(fin, "%d%d\n", &n,&m);
    for(i=1; i<=m; ++i)
    {
        c1 = fgetc(fin);
        c = fgetc(fin); //' '
        c2 = fgetc(fin);
        c = fgetc(fin);//'\n'

        ok[c1-'a'][c2-'a'] = ok[c2-'a'][c1-'a'] = 1;
    }

    lin = 0;
    for(i=0; i<='z'-'a'; ++i)
        dp[lin][i] = 1;
    lin = 1-lin;

    for(i=2; i<=n; ++i) // scriu pe lin in functie de 1-lin
    {
        for(j=0; j<='z'-'a'; ++j)
        {
            dp[lin][j] = 0;
            for(k=0; k<='z'-'a'; ++k)
                if(!ok[j][k])
                {
                    dp[lin][j] += dp[1-lin][k];
                    dp[lin][j] %= MOD;
                }
        }

        lin = 1-lin;
    }

    for(i=0; i<='z'-'a'; ++i)
    {
        ans += dp[1-lin][i];
        ans %= MOD;
    }

    fprintf(fout, "%d", ans);

    fclose(fin);
    fclose(fout);
    return 0;
}