Cod sursa(job #1424131)

Utilizator xoSauceSergiu Ferentz xoSauce Data 23 aprilie 2015 16:26:46
Problema Lista lui Andrei Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <iostream>
#include <memory.h>
using namespace std;

ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");
int mem[1001][26];
int compute(const int allow[], const int& n, int k,const int last_letter){
	if(k == n)
		return 0;
	if(last_letter != - 1 && mem[k][last_letter] != -1)
		return mem[k][last_letter];
	int count = 0;
	for(int i = 0; i < 26; i++){
		if(last_letter != i)
			count = (count + 1 + compute(allow,n,k+1,i))%104659; 
	}
	if(last_letter != -1)
		return mem[k][last_letter] = count%104659;
	return count%104659;
}
int main(){


	int n,m;
	fin >> n >> m;
	bool viz[27][27];
	int mem[1005][27];
	memset(viz,0,sizeof(viz));
	for(int i = 0; i <=n;i++)
		for(int j = 0; j < 'z'-'a'; j++)
			mem[i][j] = 0;
	for(int i = 0 ; i < m ; i++){
		char x,y;
		fin >> x >> y;
		viz[x-'a'][y-'a'] = true;
		viz[y-'a'][x-'a'] = true;	
	}

	long long sum =0;
	for(int i = 0; i < 26; i++){
		mem[n-1][i] = 1;
	}
	for(int i = n-1; i >=0; i--){
		for(int q = 0 ; q <= 'z'-'a'; q++)
			for(int j =0; j <= 'z'-'a'; j++)
				if(!viz[q][j])
					mem[i][q] = (mem[i][q] + mem[i+1][j])%104659;
	}
	int ans = 0;
	for(int i = 0; i < 26; i++)
		ans= (ans+mem[0][i])%104659;
	fout << ans << endl;

	return 0;
}