Cod sursa(job #170252)

Utilizator scvalexAlexandru Scvortov scvalex Data 2 aprilie 2008 16:20:36
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
#include <fstream>

using namespace std;

#define MOD 104659

int N, M;
bool no[26][26];

int A[2][26];

int main(int argc, char *argv[]) {
	FILE *fi = fopen("nrcuv.in", "r");
	fscanf(fi, "%d %d\n", &N, &M);
	char a, b;
	for (int i(0); i < M; ++i) {
		fscanf(fi, "%c %c\n", &a, &b);
		no[a - 'a'][b - 'a'] = no[b - 'a'][a - 'a'] = true;
	}
	fclose(fi);

	for (int i(0); i < 26; ++i)
		A[0][i] = 1;

	for (int i(1); i < N; ++i) 
		for (int j(0); j < 26; ++j) {
			A[i % 2][j] = 0;
			for (int k(0); k < 26; ++k)
				if (!no[j][k])
					A[i % 2][j] = (A[i % 2][j] + A[(i + 1) % 2][k]) % MOD;
		}

	int tot(0);
	for (int i(0); i < 26; ++i)
		tot = (tot + A[(N + 1) % 2][i]) % MOD;

	ofstream fout("nrcuv.out");
	fout << tot << endl;
	fout.close();

	return 0;
}