Pagini recente » Cod sursa (job #2354862) | Cod sursa (job #749378) | Cod sursa (job #3152977) | Cod sursa (job #420293) | Cod sursa (job #3194137)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 1000
#define MOD 104659
#define NL 26
bool incompatibile[NL][NL];
int nr_c[N+1][NL];
int main()
{
FILE *in, *out;
in = fopen("nrcuv.in", "r");
out = fopen("nrcuv.out", "w");
int n, m;
fscanf(in, "%d%d\n", &n, &m);
for (int i = 0; i < m; i++)
{
char litera1, litera2;
fscanf(in, "%c %c\n", &litera1, &litera2);
int poz1 = litera1 - 'a';///pozitia in alfabet a litera1 (nr. intre 0 si 25)
int poz2 = litera2 - 'a';
incompatibile[poz1][poz2] = incompatibile[poz2][poz1] = true;
}
for (int j = 0; j < NL; j++)
{
nr_c[1][j] = 1;
}
for (int i = 2; i <= n; i++)
{
for (int j = 0; j < NL; j++)
{
///calculam nr_c[i][j] = nr. de cuv. valide de lungime i care se termina cu a j-a lit.
for (int k = 0; k < NL; k++)
{
if (!incompatibile[k][j])
{
nr_c[i][j] += nr_c[i-1][k];///adaug a j-a litera la sf. tuturor cuv. de lung.
///i-1 care se termina cu a k-a litera
if (nr_c[i][j] >= MOD)
{
nr_c[i][j] -= MOD;
}
}
}
}
}
///rezultatul cerut este suma pe linia n
int nr_total_c = 0;
for (int j = 0; j < NL; j++)
{
nr_total_c += nr_c[n][j];
if (nr_total_c >= MOD)
{
nr_total_c -= MOD;
}
}
fprintf(out, "%d\n", nr_total_c);
fclose(in);
fclose(out);
return 0;
}