Cod sursa(job #2491480)

Utilizator maria15Maria Dinca maria15 Data 12 noiembrie 2019 17:39:43
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>

using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

int n, a, b, c, x, y, z, t, mat[3][3];

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

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

void ridicare(int r[][3], int putere){
    if(putere == 1)
        return;
    int u[3][3], w[3][3];
    copiere(u, r);
    copiere(w, r);
    ridicare(u, putere/2);
    inmultire(u, u, r);
    if(putere%2 == 1){
        inmultire(r, w, u);
        copiere(r, u);
    }
}

int main(){
    fin>>t;
    while(t--){
        fin>>x>>y>>z>>a>>b>>c>>n;
        mat[0][0] = mat[0][1] = mat[1][1] = mat[2][0] = 0;
        mat[1][0] = mat[2][1] = 1;
        mat[0][2] = c, mat[1][2] = b, mat[2][2] = a;
        ridicare(mat, n-2);
        fout<< (mat[0][2]*x%666013 + mat[1][2]*y%666013 + mat[2][2]*z%666013)<<"\n";
    }
    return 0;
}