Cod sursa(job #2047207)

Utilizator RaresEGaySopterean Adrian RaresEGay Data 24 octombrie 2017 17:23:53
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 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; (1LL<<l) <= n; ++l){
            if((1LL<<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])%mod + (sol[i][2] * m[2][j])%mod + (sol[i][3] * m[3][j])%mod) % mod;
                    }
                }
            }
            for(int i = 1; i <= 3; ++i){
                for(int j = 1; j <= 3; ++j){
                    sda[i][j] = ((m[i][1] * m[1][j])%mod + (m[i][2] * m[2][j])%mod + (m[i][3] * m[3][j])%mod) % 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)%mod + (sol[1][2] * y)%mod + (sol[1][3] * z)%mod)%mod<< '\n';
    }
}