Cod sursa(job #1791632)

Utilizator d0rina2011Craciun Dorina d0rina2011 Data 29 octombrie 2016 16:09:26
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.42 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

void A_n(long long b[9], long long X, long long Y, long long Z, \
         long long A, long long B, long long C, long long N){
    long long a[9];
    if(N == 1){
        b[0] = 0;
        b[1] = 1;
        b[2] = 0;
        b[3] = 0;
        b[4] = 0;
        b[5] = 1;
        b[6] = A;
        b[7] = B;
        b[8] = C;
    } else {
        if(N % 2 == 0) {
                A_n(b, X, Y, Z, A, B, C, N/2);
                a[0] = (b[0] * b[0] + b[1] * b[3] + b[2] * b[6]) % 666013;
                a[1] = (b[0] * b[1] + b[1] * b[4] + b[2] * b[7]) % 666013;
                a[2] = (b[0] * b[2] + b[1] * b[5] + b[2] * b[8]) % 666013;
                a[3] = (b[3] * b[0] + b[4] * b[3] + b[5] * b[6]) % 666013;
                a[4] = (b[3] * b[1] + b[4] * b[4] + b[5] * b[7]) % 666013;
                a[5] = (b[3] * b[2] + b[4] * b[5] + b[5] * b[8]) % 666013;
                a[6] = (b[6] * b[0] + b[7] * b[3] + b[8] * b[6]) % 666013;
                a[7] = (b[6] * b[1] + b[7] * b[4] + b[8] * b[7]) % 666013;
                a[8] = (b[6] * b[2] + b[7] * b[5] + b[8] * b[8]) % 666013;
                b[0] = a[0];
                b[1] = a[1];
                b[2] = a[2];
                b[3] = a[3];
                b[4] = a[4];
                b[5] = a[5];
                b[6] = a[6];
                b[7] = a[7];
                b[8] = a[8];
            } else {
                A_n(b, X, Y, Z, A, B, C, N - 1);
                a[0] = b[3];
                a[1] = b[4];
                a[2] = b[5];
                a[3] = b[6];
                a[4] = b[7];
                a[5] = b[8];
                a[6] = A * b[0] + B * b[3] + C * b[6];
                a[7] = A * b[1] + B * b[4] + C * b[7];
                a[8] = A * b[2] + B * b[5] + C * b[8];
                b[0] = a[0];
                b[1] = a[1];
                b[2] = a[2];
                b[3] = a[3];
                b[4] = a[4];
                b[5] = a[5];
                b[6] = a[6];
                b[7] = a[7];
                b[8] = a[8];
            }
        }
    }

int main()
{
    long long b[9], T, X, Y, Z, A, B, C, N, i;
    fin>>T;
    for (i = 1; i <= T; ++i){
        fin>>X>>Y>>Z>>A>>B>>C>>N;
        A_n(b, X, Y, Z, A, B, C, N);
        fout<<b[8] % 666013<<'\n';
    }
    return 0;
}