Cod sursa(job #1534460)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 23 noiembrie 2015 18:58:46
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
// O(n * sigma^2)

#include <fstream>
#include <array>
#include <numeric>
using namespace std;

constexpr int mod = 104659;
constexpr int sigma = 26;

int main(){
	ifstream f("nrcuv.in");
	ofstream g("nrcuv.out");

	int n, m;
	f >> n >> m;

	array<array<bool, sigma>, sigma> interzise = {};

	for(int i = 0; i < m; ++i){
		char a, b;
		f >> a >> b;
		a -= 'a', b -= 'a';
		interzise[a][b] = interzise[b][a] = true; }

	array<array<int, sigma>, 2> d;
	for(int i = 0; i < sigma; ++i){
		d[0][i] = 1; }
	
	for(int i = 1; i < n; ++i){
		for(int j = 0; j < sigma; ++j){
			d[i%2][j] = 0;
			for(int k = 0; k < sigma; ++k){
				if(!interzise[j][k]){
					d[i%2][j] += d[(i+1)%2][k]; } }
			d[i%2][j] %= mod; } }

	g << accumulate(begin(d[(n+1)%2]), end(d[(n+1)%2]), 0, [](const int a, const int b){
		const int tmp = a+b;
		return (tmp >= mod) ? tmp-mod : tmp; });

	return 0; }