Cod sursa(job #1753887)

Utilizator xSliveSergiu xSlive Data 7 septembrie 2016 11:52:16
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#define MOD 666013
using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");

void rezolva();
void matrixPower(unsigned long long a[3][3],unsigned long long b[3][3],unsigned long long aux[3][3]);

int main()
{
    int t;
    f >> t;
    for(int i=0;i<t;i++)    rezolva();
    return 0;
}

void rezolva(){
    unsigned long long x,y,z,a,b,c,n;
    f >> x >> y >> z >> a >> b >> c >> n;
    unsigned long long A[3][3] = {{a,b,c},{1,0,0},{0,1,0}};
    unsigned long long unit[3][3] = {{1,0,0},{0,1,0},{0,0,1}};
    unsigned long long aux[3][3];
    for(n=n-2;n;n>>=1){
        if(n%2)
            matrixPower(unit,A,aux);
        matrixPower(A,A,aux);
    }
    g << (unit[0][0] * z + unit[0][1] * y + unit[0][2] * x) % MOD << '\n';
}

void matrixPower(unsigned long long a[3][3],unsigned long long b[3][3],unsigned long long aux[3][3]){
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++){
            aux[i][j]=0;
            for(int k=0;k<3;k++)
                aux[i][j]= (aux[i][j] + a[i][k] * b[k][j]) % MOD;
    }
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            a[i][j]=aux[i][j];
}