Cod sursa(job #34273)

Utilizator TabaraTabara Mihai Tabara Data 20 martie 2007 15:23:15
Problema Lista lui Andrei Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
/*
Autor:Mihai Tabara
Punctaj: 100 
Lang: C++
Prog:lista lui andrei
*/

#include <fstream>
using namespace std;

#define in "nrcuv.in"
#define out "nrcuv.out"
#define NMAX 1001

int n, m;
int l1[27];
int l2[27];
int mat[27][27];
int nrsol;

void Read();
void Dinamic();

ofstream fout ( out );

int main()
{
    Read();
    Dinamic();

    fout << nrsol%104659 << "\n";
    fout.close();
    return 0;
}

void Read()
{
     ifstream fin ( in );
     char ch;
     fin >> n >> m;
     fin.get();
     if ( n == 1 ) 
     {
          fout << "1\n";
          exit( 0 );
     }
     int i;
     char a, b;
     for ( i = 1; i <= m; ++i )
     {
         fin >> a >> b;
         int nra = a - 96;
         int nrb = b - 96;
         
         mat[nra][nrb] = 1;
         mat[nrb][nra] = 1;
         
         fin.get();
     }
     fin.close();
}

void Dinamic()
{
     int i, j, k;
     for ( i = 1; i <= 26; ++i )
         l1[i] = 1;
     for ( i = 2; i <= n; ++i )
     {
         for ( j = 1; j <= 26; ++j )   l2[j] = 0;
         for ( j = 1; j <= 26; ++j )
         {
             for ( k = 1; k <= 26; ++k )
             {
                 if ( !mat[j][k] && !mat[k][j] )
                 {
                      l2[j] += (l1[k]%104659); 
                      l2[j] %= 104659;
                 }
             }
         }
         for ( k = 1; k <= 26; ++k )
             l1[k] = l2[k];
     }
     
     for ( i = 1; i <= 26; ++i )
         nrsol += (l2[i]%104659);
}