Cod sursa(job #611133)

Utilizator serbanlupulupulescu serban serbanlupu Data 30 august 2011 22:09:34
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cassert>
#include <vector>
#include <fstream>

using namespace std;

void read(const char *);
void solve();
void check();
void print(const char *);

int main()
{
	read("nrcuv.in");
	solve();
	check();
	print("nrcuv.out");

	return 0;
}

int a[27][27];
vector<int> v[27];
int nr_v, n;
int nr;

long long dp[1001][27];

void read(const char * file_in)
{
	char left, right;
	ifstream f ( file_in , ifstream::in );
	
	f >> n >> nr_v;
	
	for (int i = 1; i <= nr_v; ++i)
	{
		f >> left >> right;
		
		left = left - 'a' + 1;
		right = right - 'a' + 1;

		a[left][right] = 1;
		a[right][left] = 1;
	}

	for (int i = 1; i <= 26; ++i)
	{
		v[i].clear();

		for (int j = 1; j <= 26; ++j)
			v[i].push_back(j);
	}

	f.close();
};

long long q[27];

void solve()
{
	//init
	for (int i = 1; i <= 26; ++i)
		dp[1][i] = 1;

	for (int i = 2; i <= n; ++i)
	{
		for (int j = 1; j <= 26; ++j)
		{
			q[j] = 0;
			for (int k = 1; k <= 26; ++k)
				if (a[j][k] == 0)
					q[j] = (q[j] + dp[i-1][k])%104659;
		}

		for (int j = 1; j <= 26; ++j)
			dp[i][j] = q[j];
	}
};

void check()
{
};

void print(const char * file_out)
{
	long long sum = 0;
	
	for (int i = 1; i <= 26; ++i)
		sum = (sum + dp[n][i]) % 104659;

	ofstream ofs(file_out, ifstream::out);
	ofs << sum;
	ofs.close();
};