Cod sursa(job #1600016)

Utilizator RG1999one shot RG1999 Data 14 februarie 2016 16:51:27
Problema Lista lui Andrei Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#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;
}