Cod sursa(job #1540161)

Utilizator andreeacozma95Cozma Andreea andreeacozma95 Data 2 decembrie 2015 12:05:07
Problema Iepuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <stdio.h>
#include <stdlib.h>
#define mod %666013

void inmultire(long long a[3][3],long long b[3][3])
{
    long long m[3][3];
    m[0][0]=a[0][0];
    m[0][1]=a[0][1];
    m[0][2]=a[0][2];
    m[1][0]=a[1][0];
    m[1][1]=a[1][1];
    m[1][2]=a[1][2];
    m[2][0]=a[2][0];
    m[2][1]=a[2][1];
    m[2][2]=a[2][2];

    m[0][0]=((a[0][0]*b[0][0])mod+(a[0][1]*b[1][0])mod+(a[0][2]*b[2][0])mod)mod;
    m[0][1]=((a[0][0]*b[0][1])mod+(a[0][1]*b[1][1])mod+(a[0][2]*b[2][1])mod)mod;
    m[0][2]=((a[0][0]*b[0][2])mod+(a[0][1]*b[1][2])mod+(a[0][2]*b[2][2])mod)mod;
    m[1][0]=((a[1][0]*b[0][0])mod+(a[1][1]*b[1][0])mod+(a[1][2]*b[2][0])mod)mod;
    m[1][1]=((a[1][0]*b[0][1])mod+(a[1][1]*b[1][1])mod+(a[1][2]*b[2][1])mod)mod;
    m[1][2]=((a[1][0]*b[0][2])mod+(a[1][1]*b[1][2])mod+(a[1][2]*b[2][2])mod)mod;
    m[2][0]=((a[2][0]*b[0][0])mod+(a[2][1]*b[1][0])mod+(a[2][2]*b[2][0])mod)mod;
    m[2][1]=((a[2][0]*b[0][1])mod+(a[2][1]*b[1][1])mod+(a[2][2]*b[2][1])mod)mod;
    m[2][2]=((a[2][0]*b[0][2])mod+(a[2][1]*b[1][2])mod+(a[2][2]*b[2][2])mod)mod;


    a[0][0]=m[0][0];
    a[0][1]=m[0][1];
    a[0][2]=m[0][2];
    a[1][0]=m[1][0];
    a[1][1]=m[1][1];
    a[1][2]=m[1][2];
    a[2][0]=m[2][0];
    a[2][1]=m[2][1];
    a[2][2]=m[2][2];
}

void iepuri(long long a,long long b, long long c,long long x, long long y,long long z, int n,FILE *g)
{
    int i;
    long long p;
    long long mat[3][3];
    mat[0][0]=a;
    mat[0][1]=b;
    mat[0][2]=c;
    mat[1][0]=1;
    mat[1][1]=0;
    mat[1][2]=0;
    mat[2][0]=0;
    mat[2][1]=1;
    mat[2][2]=0;

    long long rez[3][3]={{1L,0L,0L},{0L,1L,0L},{0L,0L,1L}};

    p=n-2;

    for (i=0;(1<<i)<=p;i++)
    {
        if (((1<<i)&p)!=0)
            inmultire(rez,mat);
        inmultire(mat,mat);
    }

    fprintf(g,"%d\n",(int)(((x*rez[0][0])mod+(y*rez[0][1])mod+(z*rez[0][2])mod)mod));
}


int main()
{
    FILE *f=fopen("iepuri.in","r");
    FILE *g=fopen("iepuri.out","w");

    int i,t,n;
    long long a,b,c,x,y,z;

    fscanf(f,"%d",&t);

    for (i=0;i<t;i++)
    {
        fscanf(f,"%lld%lld%lld%lld%lld%lld%d",&a,&b,&c,&x,&y,&z,&n);
        iepuri(a,b,c,x,y,z,n,g);
    }

    fclose(f);
    fclose(g);
    return 0;
}