Cod sursa(job #1388179)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 15 martie 2015 11:42:28
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
using namespace std;

const int kMod = 104659;
const int kMax = 1005;
const int kAlpha = 26;
int n, m, dp[kMax][kAlpha];
bool isCompatible[kAlpha][kAlpha];

void read()
{
	for (int i = 0; i < kAlpha; ++i)
		for (int j = 0; j < kAlpha; ++j)
			isCompatible[i][j] = true;

	ifstream fin("nrcuv.in");
	fin >> n >> m;
	for (int i = 0; i < m; ++i)
	{
		char u, v;
		fin >> u >> v;
		isCompatible[u - 'a'][v - 'a'] = false;
		isCompatible[v - 'a'][u - 'a'] = false;
	}
	fin.close();
}

void write()
{
	ofstream fout("nrcuv.out");
	int res = 0;
	for (int c = 0; c < kAlpha; ++c)
		res = (res + dp[n - 1][c]) % kMod;
	fout << res << '\n';
	fout.close();
}

void countStrings()
{
	for (int c = 0; c < kAlpha; ++c)
		dp[0][c] = 1;

	for (int i = 1; i < n; ++i)
		for (int c = 0; c < kAlpha; ++c)
			for (int k = 0; k < kAlpha; ++k)
				dp[i][c] = (dp[i][c] + dp[i - 1][k] * isCompatible[c][k]) % kMod;
}

int main()
{
	read();
	countStrings();
	write();
	return 0;
}