Cod sursa(job #1457682)

Utilizator lflorin29Florin Laiu lflorin29 Data 4 iulie 2015 00:58:22
Problema Iepuri Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

const int modd = 666013;
int sol[4][4], A[4][4], p[4][4];

void mpy (int a[][4], int b[][4], int c[][4]){
    for (int i = 0 ; i < 3; i ++)
        for (int j = 0 ; j < 3 ; j++)
           for (int k = 0 ; k < 3 ; k ++)
              c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % modd;
}

int main(){
    ifstream cin ("iepuri.in");
    ofstream cout ("iepuri.out");
    int t;
    cin >> t;
    for (; t; -- t){
            int x , y , z , a , b , c , n;
            cin >> x >> y >> z >> a >> b >> c >> n;
            memset(p , 0 , sizeof(p));
            memset(sol , 0, sizeof(sol));
            memset(A,0,sizeof(A));
            p[0][1] = p[1][2] = 1,
            p[2][0] = c , p[2][1] = b , p[2][2] = a;
            for (int it = 0 ; it < 3 ; ++ it)
                sol[it][it] = 1;
            for (; n; n >>= 1){
                    if (n & 1){
                       memset(A, 0, sizeof(A)),
                       mpy(p , sol , A),
                       memcpy(sol , A , sizeof(A));
                    }
                       memset(A , 0 , sizeof(A));
                       mpy(p, p, A);
                       memcpy(p , A, sizeof(A));
            }
            cout << (1LL * x * sol[0][0] + y * sol[0][1] + z * sol[0][2]) % modd << "\n";
    }
    return 0;
}