Cod sursa(job #935448)

Utilizator rudarelLup Ionut rudarel Data 3 aprilie 2013 14:55:32
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <stdio.h>
#include <memory.h>
 
#define HASHMAX 40
#define NMAX 4000
#define mod 104659
 
long prec[NMAX], curent[NMAX];
long n, m;
long hash[HASHMAX][HASHMAX];
 
 
void read()
{
int i;
char a, b;
 
scanf("%ld %ld\n", &n, &m);
 
for(i = 0; i < m; ++i)
    {
        scanf("%c %c\n", &a, &b);
 
        hash[(a-'a')+1][(b-'a')+1] = 1;
        hash[(b-'a')+1][(a-'a')+1] = 1;
    }
}
 
 
void dinamic()
{
int i, j, k;
 
 
for(i = 1; i < NMAX; ++i)
    prec[i] = 1;
 
 
for(i = 2; i <= n; ++i)
    {
        for(k = 1; k < 27; ++k)
            for(j = 1; j < 27; ++j)
                if(!hash[k][j])
                    {
                        curent[k] += prec[j];
                        curent[k] %= mod;
                    }
 
        memcpy(prec, curent, 500*3);
        memset(curent, 0, sizeof(curent));
    }
}
 
 
 
void write()
{
unsigned long count = 0, i;
 
 
for(i = 1; i < 27; ++i)
    count += prec[i];
 
 
count %= mod;
 
 
printf("%lu\n", count);
}
 
 
 
 
void print_a(long a[NMAX][NMAX])
{
int i, j;
 
for(i = 1; i < NMAX; ++i)
    {
        for(j = 1; j < NMAX; ++j)
            printf("%ld ", a[i][j]);
        printf("\n");
    }
}
 
int main()
{
freopen("nrcuv.in", "r", stdin);
freopen("nrcuv.out", "w", stdout);
 
 
read();
 
 
//print_a(hash);
 
 
dinamic();
 
 
write();
 
 
fclose(stdin);
fclose(stdout);
 
return 0;
}