Cod sursa(job #277109)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 11 martie 2009 15:12:37
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <cstdio>
#include <cstring>

using namespace std;

long long a[27][27],w[27][27],n,m;

void copiere(long long a[27][27],long long w[27][27])
{
    for (long long i=1; i<=26; i++)
        for (long long j=1; j<=26; j++)
            w[i][j]=a[i][j];
}

void inmultire(long long a[27][27], long long b[27][27], long long c[27][27])
{
    long long d[27][27];
    for (long long i=1; i<=26; i++)
        for (long long j=1; j<=26; j++)
        {
            d[i][j]=0;
            for (long long k=1; k<=26; k++)
                d[i][j]+=a[i][k]*b[k][j];
            d[i][j]%=104659;
        }
    copiere(d,w);
}

void inm_log(long long i)
{
    if (i==1)
        copiere(a,w);
    else
    if (i%2==0)
    {
        inm_log(i/2);
        inmultire(w,w,w);
    }
    else
    {
        inm_log(i-1);
        inmultire(a,w,w);
    }
}

void citire()
{
    char *x,*y,s[20];
    for (long long i=1; i<=26; i++)
        for (long long j=1; j<=26; j++)
            a[i][j]=1;
    freopen("nrcuv.in","r",stdin);
    scanf("%lld %lld\n", &n, &m);
    for (long long i=0; i<m; i++)
    {
        //scanf("%c %c\n", &x, &y);
        fgets(s,20,stdin);
        x=strtok(s," ,\n");
        y=strtok(NULL,", \n");
        a[x[0]-'a'+1][y[0]-'a'+1]=a[y[0]-'a'+1][x[0]-'a'+1]=0;
    }
}

int main()
{
    freopen("nrcuv.out","w",stdout);
    citire();
    if (n!=1)
        inm_log(n-1);
    else
    {
        printf("26\n");
        return 0;
    }
    long long s=0;
    for (long long i=1; i<=26; i++)
        for (long long j=1; j<=26; j++)
            s+=w[i][j],s%=104659;
    printf("%lld\n",s%104659);
    return 0;
}