Cod sursa(job #133722)

Utilizator FlorianFlorian Marcu Florian Data 9 februarie 2008 16:14:03
Problema Lista lui Andrei Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
FILE*f=fopen("nrcuv.in","r");
FILE*g=fopen("nrcuv.out","w");
long long a[1003][27]; // nr de cuvine de lungime i, avand pe ultima pozitie j.
int ok[27][27]; //ok[i][j]=1 daca caracterul j nu poate aparea dupa i.
int n,m;
void read()
 {
 fscanf(f,"%d %d\n",&n,&m);
 char c,h;
 while(m--)
   {
   fscanf(f,"%c %c\n",&c,&h);
   ok[c-96][h-96]=1;
   ok[h-96][c-96]=1;
   }
 }
void dinamica()
 {
 int i,j,k;
 for(i=1;i<=26;++i)
   a[1][i]=1;
 for(i=2;i<=n;++i)
   {
   //cuvinte de lungime i
   for(j=1;j<=26;++j)
     {
     //cuvine cu ultima litera j
     for(k=1;k<=26;++k)
       if(ok[j][k]==0 && ok[k][j]==0) a[i][j]+=a[i-1][k];  //adaug sirurile de lungime i-1, avand k pe ultima pozitie
     }
   }
 long long sol=0;
 for(i=1;i<=26;++i) sol+=a[n][i];
 fprintf(g,"%lld\n",sol);
 }
int main() {read(); dinamica(); return 0;}