Cod sursa(job #2081097)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 3 decembrie 2017 22:40:20
Problema Lista lui Andrei Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
//O(N*(sigma^2))
//Expected 90-100
#include<stdio.h>
#define MAXN 1000
#define MAXSIGMA 26
#define MOD 104659
FILE*fin,*fout;
long long d[MAXN+1][MAXSIGMA+1];
bool adiac[MAXSIGMA+1][MAXSIGMA+1];
int main()
{
    fin=fopen("nrcuv.in","r");
    fout=fopen("nrcuv.out","w");
    int N,M;
    fscanf(fin,"%d%d",&N,&M);
    fgetc(fin);
    for(int i=1;i<=M;i++)
    {
        char v,u;
        v=fgetc(fin);
        fgetc(fin);
        u=fgetc(fin);
        fgetc(fin);
        adiac[v-'a'+1][u-'a'+1]=1;
        adiac[u-'a'+1][v-'a'+1]=1;
    }
    for(int i=1;i<=MAXSIGMA;i++)
    {
        d[1][i]=1;
    }
    for(int i=2;i<=N;i++)
    {
        for(int j=1;j<=MAXSIGMA;j++)
        {
            d[i][j]=0;
            for(int k=1;k<=MAXSIGMA;k++)
            {
                if(!adiac[j][k])
                {
                    d[i][j]+=(d[i-1][k])%MOD;
                    d[i][j]%=MOD;
                }
            }
            fprintf(stderr,"%lld ",d[i][j]);
        }
        fprintf(stderr,"\n");
    }
    long long ans=0;
    for(int i=1;i<=MAXSIGMA;i++)
    {
        ans+=d[N][i];
        ans%=MOD;
    }
    fprintf(fout,"%lld",ans);
    fclose(fin);
    fclose(fout);
    return 0;
}