Cod sursa(job #1887827)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 21 februarie 2017 19:38:54
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#define N 1000
#define L 150
#define mod 104659

int n,m,i,j,k;
int d[N][L],v[L];        /// v['a']=cate litere pot sa stea langa 'a'
bool p[L][L];
char a,b;

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

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

    for(i='a';i<='z';i++)
    {
        v[i]=26;
        d[1][i]=1;
    }

    for(i=0;i<m;i++)
    {
        fscanf(f1,"%c %c\n",&a,&b);

        if(!p[a][b])
        {
            p[a][b]=p[b][a]=true;
            if(a==b)
                v[a]--;
            else
            {
                v[a]--;
                v[b]--;
            }
        }
    }

    for(i=2;i<=n;i++)
        for(j='a';j<='z';j++)
            for(k='a';k<='z';k++)
                if(!p[j][k])
                {
                    d[i][j]+=d[i-1][k];
                    if(d[i][j]>=mod)
                        d[i][j]-=mod;
                }

    long long sol=0;
    for(i='a';i<='z';i++)
        sol+=d[n][i];

    fprintf(f2,"%lld\n",sol%mod);

    return 0;
}