Cod sursa(job #2498705)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 24 noiembrie 2019 11:18:05
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>
#define mod 666013
using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
long long t, x, y, z, a, b, c, n, mat [3][3], basic [3][3];
void init (){
    for (int i = 0; i < 3; i ++)
        for (int j = 0; j < 3; j ++)
            mat [i][j] = basic [i][j] = 0;
}
void Inmultire (long long basic [3][3], long long mat [3][3]){
    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] += basic [i][k] * mat [k][j];
            aux [i][j] %= mod;
        }
    }
    for (int i = 0; i < 3; i ++)
        for (int j = 0; j < 3; j ++)
            basic [i][j] = aux [i][j];
}
int main (){
    fin >> t;
    for (int o = 1; o <= t; o ++){
        fin >> x >> y >> z >> a >> b >> c >> n;
        n -= 2; init ();
        for (int i = 0; i < 3; i ++)
            basic [i][i] = 1;
        mat [1][0] = mat [2][1] = 1;
        mat [0][2] = c, mat [1][2] = b, mat [2][2] = a;
        while (n != 0){
            if (n % 2 != 0)
                Inmultire (basic, mat);
            Inmultire (mat, mat);
            n /= 2;
        }
        fout << (x * basic [0][2] + y * basic [1][2] + z * basic [2][2]) % mod << '\n';
    }
    return 0;
}