Cod sursa(job #652129)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 23 decembrie 2011 02:57:40
Problema Lista lui Andrei Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
using namespace std;

int litOK[26][26], dp[1001][26];
//dp[i][j] = cate cuvinte de lungime i, care se termina cu a j-a litera pot forma

int main(){
	freopen("nrcuv.in", "r", stdin), freopen("nrcuv.out", "w", stdout);
	int n, m, i, j, k, sum;
	char lit1, lit2;
	scanf ("%d %d", &n, &m);
	
	for (i = 0; i < 26; i++)
		for (j = 0; j < 26; j++) litOK[i][j] = true;
	
	for (i = 1; i <= m; i++){
		do scanf("%c", &lit1);
			while (!(lit1 >= 'a' && lit1 <= 'z'));
		do scanf("%c", &lit2);
			while (!(lit2 >= 'a' && lit2 <= 'z'));
		litOK[lit1 - 'a'][lit2 - 'a'] = false;
		litOK[lit2 - 'a'][lit1 - 'a'] = false;
	}

	for (i = 0; i < 26; i++) dp[1][i] = 1;
	
	for (i = 2; i <= n; i++)
		for (j = 0; j < 26; j++)
			for (k = 0; k < 26; k++)
				if (litOK[j][k]) dp[i][j] += dp[i-1][k];
	
	for (i = sum = 0; i < 26; i++) sum += dp[n][i];
	printf("%d\n", sum);
	
	return 0;
}