Cod sursa(job #575642)

Utilizator Catah15Catalin Haidau Catah15 Data 8 aprilie 2011 16:55:52
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#define maxN 1005
#define PB push_back
#define MOD 104659


int N, M;
vector <int> lista[30];
int d[maxN][30];
int S[maxN];
bool lit[30][30];



int main()
{
	ifstream f("nrcuv.in");
	ofstream g("nrcuv.out");
	
	f >> N >> M;
	
	for (int i = 1; i <= M; ++ i)
	{
		char lit1, lit2;
		
		f >> lit1 >> lit2;
		
		lit[lit2 - 'a'][lit1 - 'a'] = 1;
		lit[lit1 - 'a'][lit2 - 'a'] = 1;
	}
	
	
	for (int i = 0; i < 26; ++ i)
		for (int j = 0; j < 26; ++ j)
			if (lit[i][j]) 
				lista[i].PB (j);
	
	
	for (int i = 0; i < 26; ++ i)
		d[1][i] = 1;
	
	S[1] = 26;
	
	
	for (int i = 2; i <= N; ++ i)
	{
		for (int j = 0; j < 26; ++ j)
		{
			int sol = S[i - 1];
			
			for (int t = 0; t < lista[j].size(); ++ t)
				sol = (sol + MOD - d[i - 1][lista[j][t]]) % MOD;
			
			d[i][j] = sol;
			
			S[i] += sol;
			
			S[i] %= MOD;
		}
	}
	
	
	g << S[N];
	
	f.close();
	g.close();
	
	return 0;
}