Cod sursa(job #529829)

Utilizator micky000Antal Ioan micky000 Data 6 februarie 2011 10:25:59
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
/*
    a[i][j] = cate cuvinte sunt de lungime i care se termina in litera j
    a[i][j] = a[i-1][1] + a[i-1][2] + ... + a[i-1][27]
              fiecare termen adunat daca este litera compatibila
    a[1][j] = 1;
*/
 
#include <cstdio>
 
const int L = 26;
const int N = 1000;
const int R = 104659;
 
int n;
int a[N+1][L+1];
bool lit_proasta[L+1][L+1];
 
void citire()
{
    int m;
    char a,b;
    scanf("%i%i",&n,&m);
    for (int i = 1; i <= m; ++i)
    {
        scanf("\n%c %c",&a,&b);
        lit_proasta[a-'a'+1][b-'a'+1] = true;
        lit_proasta[b-'a'+1][a-'a'+1] = true;
    }
}
 
void initializare_dinamica()
{
    for (int j = 1; j <= L; ++j)
        a[1][j] = 1;
}
 
void dinamica()
{
    int r=0;
    initializare_dinamica();
    for (int i = 2; i <= n; ++i)
        for (int j = 1; j <= L; ++j)
            for (int k = 1; k <= L; ++k)
                if (!lit_proasta[j][k])
                    a[i][j] = (a[i][j] + a[i-1][k])%R;
   for (int j = 1; j <= L; ++j)
        r = (r + a[n][j])%R;
    printf("%i",r);
}
 
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    citire();
    dinamica();
    return 0;
}