Cod sursa(job #794969)

Utilizator avramavram andrei marius avram Data 7 octombrie 2012 13:53:54
Problema Lista lui Andrei Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
//D[i][j] = cate cuvinte de lungime j exista si terminate cu litera i
// calculez un cuvant de lungime i adaugand o litera la finalul unuia de lungime i-1

#include <fstream>

using namespace std;
int sol, n, m, i, j, ii;
char x, y;

int D[26][1010];
int M[26][26];

int main() {
	ifstream f("nrcuv.in");
	ofstream g("nrcuv.out");
	f>>n>>m;
	for (i=1;i<=m;i++) {
		f>>x>>y;
		M[x-'a'][y-'a'] = 1;
		M[y-'a'][x-'a'] = 1;
	}
	for (i=0;i<=25;i++)
		D[i][1] = 1;
	
	for (j=2;j<=n;j++)
		for (i=0;i<=25;i++) {
			//calculam D[i][j] (pun deci la final litera i)
			D[i][j] = 0;
			for (ii=0;ii<=25;ii++)
				if (M[ii][i] == 0) {
					D[i][j] += D[ii][j-1];
					D[i][j] %= 104695;
				}
		}
	for (i=0;i<=25;i++) {
		sol += D[i][n];
		sol %= 104695;
	}
	
	g<<sol<<"\n";
	
	return 0;
}