Cod sursa(job #1791024)

Utilizator gorneanu.andreiFMI Gorneanu Andrei gorneanu.andrei Data 28 octombrie 2016 23:24:03
Problema Iepuri Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <stdio.h>
#define MOD 666013
long long a[4][4],d[4][4];
int a1,b1,c1,v1,v2,v3,n;


    void exp_matrice(long long y[4][4],long long z[4][4],long long q[4][4],int mod){
    long long x[4][4];
    int i,j,k;

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            x[i][j] = 0;


    if(mod == 2){

    for(i = 1;i <= 3; ++i)
        for(j = 1;j <= 3; ++j)
            for(k = 1;k <= 3; ++k)
        x[i][j] = x[i][j] + y[i][k] * y[k][j];


    for(i = 1;i <= 3; ++i)
        for(j = 1;j <= 3; ++j)
        q[i][j] = x[i][j];


    }
    else{

    x[1][1] = (y[1][1] * z[1][1])%MOD + (y[1][2] * z[2][1])%MOD + (y[1][3] * z[3][1])%MOD;
    x[2][1] = (y[2][1] * z[1][1])%MOD + (y[2][2] * z[2][1])%MOD + (y[2][3] * z[3][1])%MOD;
    x[3][1] = (y[3][1] * z[1][1])%MOD + (y[3][2] * z[2][1])%MOD + (y[3][3] * z[3][1])%MOD;


    q[1][1] = x[1][1]%MOD;
    q[2][1] = x[2][1]%MOD;
    q[3][1] = x[3][1]%MOD;
    }

}

    int putere(int k){


        long long c[4][4],rez[4][4];
        a[1][1] = 0;
        a[1][2] = 1;
        a[1][3] = 0;
        a[2][1] = 0;
        a[2][2] = 0;
        a[2][3] = 1;
        a[3][1] = c1;
        a[3][2] = b1;
        a[3][3] = a1;

        int i, j;

        for(i = 1;i <= 3; ++i)
            for(j = 1;j <= 3; ++j)
            c[i][j] = a[i][j];

        rez[1][1] = v1;
        rez[2][1] = v2;
        rez[3][1] = v3;

        while(k)
        {
            if(k % 2 ==0)
            {
                k = k / 2;
                exp_matrice(c,c,c,2);

            }
            else
            {
                --k;
                exp_matrice(c,rez,rez,1);

            }
        }


        return rez[3][1];



    }

int main()


{

    FILE *f,*g;
    int k, t, i, rasp;

    f=fopen("iepuri.in","r");
    g=fopen("iepuri.out","w+");


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


    for(i = 1;i <= t; ++i)
    {
        fscanf(f,"%d %d %d %d %d %d %d",&v1,&v2,&v3,&a1,&b1,&c1,&n);
        rasp = putere(n - 2);
        fprintf(g,"%d\n",rasp);
    }


}