Cod sursa(job #917854)

Utilizator lianaliana tucar liana Data 18 martie 2013 13:31:42
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<stdio.h>
#define dmax 4
#define modulo 666013
long long M[dmax][dmax]={0,0,0,0,
              0,0,0,0,
              0,1,0,0,
              0,0,1,0,
            };
long long rez[dmax][dmax], A[dmax][dmax], C[dmax][dmax], i, j, k, t, ii, x, y, z, a, b, c, n, jj;


void inmultire(long long a[dmax][dmax],long long b[dmax][dmax],long long n,long long p,long long m)
{
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
        {
            C[i][j]=0;
            for  (k=1;k<=p;k++)
                C[i][j]=(C[i][j]+a[i][k]*b[k][j])%modulo;
        }
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            a[i][j]=C[i][j];
}

void putere(long p)
{
    if (p==0)
    {
        for (i=1;i<=3;i++)
            for (j=1;j<=3;j++)
                rez[i][j]=0;
        rez[1][1]=rez[2][2]=rez[3][3]=1;
    }
    else
        if (p%2==0)
        {
            putere(p/2);
            inmultire(rez,rez,3,3,3);
        }
        else
        {
            putere(p-1);
            inmultire(rez,M,3,3,3);
        }
}

int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%ld",&t);
    for (ii=1;ii<=t;ii++)
    {
        scanf("%ld %ld %ld %ld %ld %ld %ld",&x,&y,&z,&a,&b,&c,&n);
        M[1][3]=c; M[2][3]=b; M[3][3]=a;
        putere(n-2);
        A[1][1]=x;  A[1][2]=y;  A[1][3]=z;
      /*  for (jj=3;jj<=n;jj++)
            inmultire(A,M,1,3,3);*/
        inmultire(A,rez,1,3,3);
        printf("%ld\n",A[1][3]);
    }
    return 0;
}