Cod sursa(job #2047174)

Utilizator RaresEGaySopterean Adrian RaresEGay Data 24 octombrie 2017 17:07:45
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>

#define mod 666013

using namespace std;

unsigned long long t, x, y, z, a, b, c, n;
long m[4][4], sol[4][4], asd[4][4], sda[4][4];

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

int main(){
    f >> t;
    for(; t > 0; --t){
        f >> x >> y >> z >> a >> b >> c >> n;

        m[1][1] = 0, m[1][2] = 1, m[1][3] = 0;
        m[2][1] = 0, m[2][2] = 0, m[2][3] = 1;
        m[3][1] = c, m[3][2] = b, m[3][3] = a;

        for(int i = 1; i <= 3; ++i){
            for(int j = 1; j <= 3; ++j){
                if(i == j) sol[i][j] = 1, asd[i][j] = 1;
                else sol[i][j] = 0, asd[i][j] = 0;
            }
        }

        for(int l = 0; (1<<l) <= n; ++l){
            if((1<<l) & n){
                for(int i = 1; i <= 3; ++i){
                    for(int j = 1; j <= 3; ++j){
                        asd[i][j] = (sol[i][1] * m[1][j] + sol[i][2] * m[2][j] + sol[i][3] * m[3][j]) % mod;
                    }
                }
            }
            for(int i = 1; i <= 3; ++i){
                for(int j = 1; j <= 3; ++j){
                    sda[i][j] = (m[i][1] * m[1][j] + m[i][2] * m[2][j] + m[i][3] * m[3][j]) % mod;
                }
            }
            for(int i = 1; i <= 3; ++i){
                for(int j = 1; j <= 3; ++j){
                    sol[i][j] = asd[i][j];
                    m[i][j] = sda[i][j];
                }
            }
        }
        g << (sol[1][1] * x + sol[1][2] * y + sol[1][3] * z) % mod << '\n';
    }
}