Cod sursa(job #1983537)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 22 mai 2017 12:10:45
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>

using namespace std;

FILE *in,*out;

bool imp[30][30];

int dp[1001][30];

const int modulo = 104659;

int main()
{
    in = fopen("nrcuv.in","r");
    out = fopen("nrcuv.out","w");
    int n,m;
    fscanf(in,"%d %d\n",&n,&m);
    for(int i = 1;i <= m;i ++)
    {
        char x,y;
        fscanf(in,"%c %c\n",&x,&y);
        int a = x - 'a';
        int b = y - 'a';
        //printf("%d %d\n",a,b);
        imp[a][b] = imp[b][a] = true;
    }
    for(int i = 0;i < 26;i ++)
        dp[1][i] = 1;
    int nr = 0;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 0;j < 26;j ++)
        {
            for(int k = 0;k < 26;k ++)
            {
                if(!imp[k][j])
                {
                    dp[i][j] = (dp[i][j] + dp[i-1][k]) % modulo;
                }
            }
            if(i ==n)
                nr = (nr + dp[i][j]) % modulo;
        }
        //for(int j = 0;j < 26;j ++)
            //fprintf(out,"%d\t", dp[i][j]);
        //fprintf(out, "\n");
    }
    fprintf(out,"%d",nr);
    return 0;
}