Cod sursa(job #2005123)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 26 iulie 2017 14:40:33
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#define MOD 666013
using namespace std;

ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
long long t,x,y,z,a,b,c,n,s,A[4][4],sol[4][4],X[4][4];
void produs (long long a[4][4],long long b[4][4],long long c[4][4]){
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++){
            c[i][j] = 0;
            for (int k=1;k<=3;k++){
                c[i][j] += (a[i][k] * b[k][j] * 1LL % MOD);
                c[i][j] %=  MOD;
            }
        }
}
void copiere (long long a[4][4],long long b[4][4]){
    for (int i=1;i<=3;i++)
        for (int j=1;j<=3;j++)
            a[i][j] = b[i][j];
}

int main (){

    fin>>t;
    for (;t--;){
        fin>>x>>y>>z>>a>>b>>c>>n;
        for (int i=1;i<=3;i++)
            for (int j=1;j<=3;j++){
                A[i][j] = 0;
                if (i == j)
                    sol[i][j] = 1;
                else
                    sol[i][j] = 0;
            }
        A[2][1] = A[3][2] = 1;
        A[1][1] = a;
        A[1][2] = b;
        A[1][3] = c;

        n -= 2;
        while (n){
            if (n % 2 == 1){
                produs (A,sol,X);
                copiere (sol,X);
            }
            produs (A,A,X);
            copiere (A,X);
            n/=2;
        }
        s = sol[1][1] * z * 1LL % MOD;
        s += (sol[1][2] * y * 1LL % MOD) % MOD;
        s %= MOD;
        s += (sol[1][3] * x * 1LL % MOD) % MOD;
        s %= MOD;
        fout<<s<<"\n";
    }





    return 0;
}