Pagini recente » Cod sursa (job #2128371) | Cod sursa (job #552985) | Cod sursa (job #349913) | Cod sursa (job #2686236) | Cod sursa (job #872082)
Cod sursa(job #872082)
# include <fstream>
# include <algorithm>
# include <vector>
# include <cstring>
# define dim 30
# define dim2 1005
# define mod 104659
using namespace std;
ifstream f("nrcuv.in");
ofstream g("nrcuv.out");
int uz[ dim ][ dim ], dp[ dim2 ][ dim ]; // dp[ i ][ j ] = posibilitatile de a forma un cuvant de lungime i cu primele j litere din alfabet
int N, M;
int sol;
void citire()
{
int i;
char a, b;
f >> N >> M;
for ( i = 1 ; i <= M ; i++ )
{
f >> a >> b;
//g << a << " " << b << "\n";
uz[ a - 'a' + 1 ][ b - 'a' + 1 ] = 1;
uz[ b - 'a' + 1 ][ a - 'a' + 1 ] = 1;
}
}
void rezolva()
{
int i, j, k;
for ( i = 1 ; i <= 26 ; i++ )
dp[ 1 ][ i ] = 1; // cu o litera pot forma un singur cuvant,nu?
for ( i = 2 ; i <= N ; i++ )
for ( j = 1 ; j <= 26 ; j++ )
for ( k = 1 ; k <= 26 ; k++ )
if ( uz[ j ][ k ] == 0 ) /// daca pot pune litera j langa litera k
dp[ i ][ j ] = ( dp[ i ][ j ] + dp[ i - 1 ][ k ] ) % mod; // adun la solutii toate cuvintele formate din i - 1 litere si incep cu litera k
for ( i = 1 ; i <= 26 ; i++ )
sol = ( sol + dp[ N ][ i ] ) % mod;
g << sol;
}
int main()
{
citire();
rezolva();
return 0;
}