Cod sursa(job #1887777)

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

int n,m,i,j;
int d[N][L],v[L];        ///d[i][j]=nr de cuvinte de n litere care se pot forma cu primele j cifre;     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++)
        {
            d[i][j]=d[i-1][j]*v[j];
            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;
}