Cod sursa(job #695632)

Utilizator avram_florinavram florin constantin avram_florin Data 28 februarie 2012 13:29:47
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
#include<cstdio>

using namespace std;

const int MaxN = 1001;
const int MaxL = 30;
const int Mod = 104659;

const char InFile[] = "nrcuv.in";
const char OutFile[] = "nrcuv.out";

int N,M,Sol,P[MaxL][MaxL],Din[MaxN][MaxL];
//Din[i][j] = numarul de siruri de lungime i care au ultima litera j
//P[i][j] = 1 , daca literele i si j nu pot fi alaturate
//P[i][j] = 0 , daca literele i si j pot fi alaturate

int main()
{
	int i,j,k;
	ifstream fin( InFile );
	ofstream fout( OutFile );
	char ch1,ch2;
	fin >> N >> M;
	for( ; M ; --M )
		{
			fin >> ch1 >> ch2;
			P[ch1-'a'+1][ch2-'a'+1] = P[ch2-'a'+1][ch1-'a'+1] = 1;
		}
	M = 26;
	for( j = 1 ; j <= M ; j++ )
		Din[1][j] = 1;
	for( i = 2 ; i <= N ; i++ )
		for( j = 1 ; j <= M ; j++ )
			for( k = 1 ; k <= M ; k++ )
				if( !P[j][k] )
					Din[i][j] = (Din[i][j]+Din[i-1][k]) % Mod;
	Sol = 0;
	for( j = 1 ; j <= M ; j++ )
		Sol = (Sol + Din[N][j] )% Mod;
	fout << Sol << '\n';
	fin.close();
	fout.close();
	return 0;
}