Cod sursa(job #1845420)

Utilizator CidanielCraciun Ioan Daniel Cidaniel Data 11 ianuarie 2017 14:28:18
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <string.h>
#define r 666013
using namespace std;


void inmultire_matrice (long long a[5][5], long long b[5][5])
{
    int i, j;
    long long c[5][5];
    memset (c, 0, sizeof(c));
    for (i=0; i<=2; i++)
        for (j=0; j<=2; j++)
    {
        c[i][j] = (a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]);
    }
    memcpy (a, c, sizeof(c));
}

void afisare_matrice (long long a[5][5])
{
    int i, j;
    for (i=0; i<=2; i++)
    {
        for (j=0; j<=2; j++)
        {
            cout<<a[i][j]<<'\t';
        }
        cout<<'\n';
    }
}

int main()
{
    int T, x, y, z, a, b, c, n, i;
    long long A[5][5], S[5][5];
    freopen ("iepuri.in", "r", stdin);
    freopen ("iepuri.out", "w", stdout);
    scanf ("%d", &T);
    for (i=0; i<T; i++)
    {
        memset (A, 0, sizeof(A));
        memset (S, 0, sizeof(S));
        scanf ("%d%d%d%d%d%d%d", &x, &y, &z, &a, &b, &c, &n);
        n-=2;
        A[0][0]=a;      A[0][1]=b;      A[0][2]=c;
        A[1][0]=1;
                        A[2][1]=1;
        S[0][0]=1;
                        S[1][1]=1;
                                        S[2][2]=1;
        while (n)
        {
            if (n&1)
                inmultire_matrice (S, A);
            n>>=1;
            inmultire_matrice (A, A);
        }
        printf ("%d\n", (S[0][0]*z + S[0][1]*y + S[0][2]*x)%r);
    }
    return 0;
}