Cod sursa(job #648807)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 14 decembrie 2011 16:40:44
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define nmax 1010
#define mmax 2010
#define modulo 104659

bool nu_merg[nmax][nmax];
int dp[nmax][26];

int main(){
   int n,m;
   FILE *fin=fopen("nrcuv.in","r");
   fscanf(fin,"%d%d\n",&n,&m);
   int i,j,k;
   char a,b;
   for(i=0;i<m;i++){
      fscanf(fin,"%c %c\n",&a,&b);
      nu_merg[a-'a'][b-'a']=nu_merg[b-'a'][a-'a']=1;
   }
   for(j=0;j<26;j++)dp[1][j]=1;

   for(i=1;i<n;i++){//calculez linia i+1
        for(j=0;j<26;j++){
           for(k=0;k<26;k++){
              if(nu_merg[j][k]==0){//adica daca merg j si k
                 dp[i+1][k]= (dp[i+1][k]+dp[i][j])%modulo;
              }
           }
        }
   }
   //raspunsul
   int suma=0;
   for(i=0;i<26;i++)
     suma=(suma+dp[n][i])%modulo;
   FILE *fout=fopen("nrcuv.out","w");
   fprintf(fout,"%d\n",suma);
return 0;
}