Cod sursa(job #331660)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 14 iulie 2009 21:51:21
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
/* Relatia de recurenta:
    v[i][j]+=v[i-1][k] | a[j][k]!=1 && a[k][j]!=1
    Rez=suma(v[n][i]) i=1,26
*/     
#include <cstdio>
#define MOD 104659
#define L 26
#define DIM 1003
#define V 96
int a[DIM][DIM],s,v[DIM][DIM],n,m1,m2,m,i;
char l1,l2;
using namespace std;

int read()
{   
    char j,k;
    scanf("%d%d\n",&n,&m);
    for (i=1; i<=m; ++i)
        {
             scanf("%c %c\n",&j,&k);
             a[j-V][k-V]=1;
             a[k-V][j-V]=1;
            
        }         
return 0;
}
int solve()
{   
    int j,k;
    for (i=1; i<=L; ++i) v[1][i]=1;    
    for (i=2; i<=n; ++i)          //dimensiunea i
        for (j=1; j<=L; ++j)     // ultma litera j
            for (k=1; k<=L; ++k) // //toate cuvinte de dimensiunea i cu ultima litera j vecina cu k
                      if ( !a[j][k] && !a[k][j] ) 
                        v[i][j]=(v[i][j]+v[i-1][k])%MOD;                 
for (i=1; i<=L; ++i) s=(s+v[n][i])%MOD;
printf("%d",s);
return 0;
}      
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    read();
    solve();
    return 0;
}