Cod sursa(job #2003109)

Utilizator victoreVictor Popa victore Data 21 iulie 2017 20:20:30
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<cstdio>
#include<cstring>

using namespace std;

const int nmax=1005;
const int mod=104659;

int dp[nmax][50];
bool interzis[35][35];

inline int gnum(char ch)
{
    return ch-'a'+1;
}
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    int n,i,j,m,k;
    scanf("%d%d\n",&n,&m);
    char ch1,ch2;
    for(i=1;i<=m;++i)
    {
        scanf("%c %c\n",&ch1,&ch2);
        interzis[gnum(ch2)][gnum(ch1)]=1;
        interzis[gnum(ch1)][gnum(ch2)]=1;
    }
    for(i=1;i<=26;++i)
        dp[1][i]=1;
    for(i=2;i<=n;++i)
        for(j=1;j<=26;++j)
            for(k=1;k<=26;++k)
                if(!interzis[j][k])
                {
                    dp[i][j]+=dp[i-1][k];
                    if(dp[i][j]>=mod)
                        dp[i][j]-=mod;
                }
    long long sum=0;
    for(i=1;i<=26;++i)
        sum+=dp[n][i];
    sum%=mod;
    printf("%lld",sum);
}