Cod sursa(job #1793328)

Utilizator cameleonGeorgescu Dan cameleon Data 30 octombrie 2016 22:13:44
Problema Iepuri Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<stdio.h>
#define mod 666013
int m[3][3], m1[3][3], sol[3][3], v[3], x, y, z, a, b, c, n;

void atrib(int a[3][3], int b[3][3])
{   int i, j;
    for(i=0; i<3; i++)
        for(j=0; j<3; j++)
            a[i][j]=b[i][j];
}

 void inm(int a[3][3], int b[3][3], int c[3][3])
{   int i, j, k;
    for(i=0; i<3; i++)
        for(j=0; j<3; j++)
        {   c[i][j]=0;
            for(k=0; k<3; k++)
                c[i][j]=(((1ll*a[i][k]*b[k][j])%mod)+c[i][j])%mod;
        }
}

 void lgput (int m[3][3], int p)
{   int temp[3][3], i, j;

    for(i=0; i<3; i++) for(j=0; j<3; j++) if(i==j) sol[i][j]=1; else sol[i][j]=0;

    for(i=0; ((1<<i)<=p); i++)
    {   if(((1<<i)&p)!=0)
        {   inm(sol, m, temp);
            atrib(sol, temp);
        }
        inm(m, m, temp);
        atrib(m, temp);
    }

}

void solve()
{   int rez=0;
    lgput(m, n-2);
    atrib(m, sol);
    rez=((1ll*m[0][0]*v[0])%mod +
         (1ll*m[0][1]*v[1])%mod +
         (1ll*m[0][2]*v[2])%mod) %mod;

    printf("%d\n", rez);
}

int main()
{   int t, i;
    freopen("iepuri.in", "r", stdin);
    freopen("iepuri.out", "w", stdout);
    scanf("%d", &t);

    for(i=0; i<t; i++)
    {   scanf("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
        m[0][0]=a; m[0][1]=b; m[0][2]=c;
        m[1][0]=1; m[1][1]=0; m[1][2]=0;
        m[2][0]=0; m[2][1]=1; m[2][2]=0;
        v[0]=z; v[1]=y; v[2]=x;
        solve();
    }
    return 0;

}