Pagini recente » Cod sursa (job #1696548) | Cod sursa (job #933091) | Cod sursa (job #1253846) | Cod sursa (job #126650) | Cod sursa (job #133722)
Cod sursa(job #133722)
#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;}