Pagini recente » Cod sursa (job #482690) | Cod sursa (job #1773884) | Arhiva de probleme | Cod sursa (job #562718) | Cod sursa (job #1600016)
#include <cstdio>
using namespace std;
int n,m,mat[30][30],x,y,i,j,mat2[30][1005],suma,mod;
char c,cuv1,cuv2;
int sum(int i)
{
int s;
s=0;
int n;
n=26;
int j;
for(j=1;j<=n;j++)
s+=mat[i][j];
return s;
}
int main()
{
freopen("nrcuv.in","r",stdin);
freopen("nrcuv.out","w",stdout);
scanf("%d",&n);
scanf("%d",&m);
scanf("%c",&c);
mod= 104659;
//mat[i][j] va contine 1 daca exista pereche intre i si j care sa nu fie buna
for(i=1;i<=m;i++)
{
scanf("%c",&cuv1);
x=cuv1;
scanf("%c",&c);
scanf("%c",&cuv2);
y=cuv2;
mat[x-96][y-96]=1;
mat[y-96][x-96]=1;
scanf("%c",&c);
}
//mat2[i][j] reprezinta cate cuvinte cu j litere pot exista si se termina in i;
//am calculat dinamic mat2[i][j] ca fiind mat2[i][j-1]*26-sum(i)=sum (i) reprezinta cate perechi care se termina in i nu sunt bune (adunand toate elementele de pe linia i a matricii mat)
for(i=1;i<=26;i++)
mat2[i][1]=1;
for(j=2;j<=n;j++)
for(i=1;i<=26;i++)
mat2[i][j]=mat2[i][j-1]*26-sum(i);
suma=0;
for(i=1;i<=26;i++)
suma+=mat2[i][n];
printf("%d",suma);
return 0;
}