Cod sursa(job #1354981)

Utilizator marcdariaDaria Marc marcdaria Data 22 februarie 2015 11:43:37
Problema Iepuri Scor 100
Compilator cpp Status done
Runda 9neplace3 Marime 1.28 kb
#include <fstream>
#define MOD 666013

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

int T, n, X, Y, Z, a, b, c;

void cpy(long long a[3][3], long long b[3][3]){
    for(int i = 0; i <= 2; i ++)
        for(int j = 0; j <= 2; j ++)
            a[i][j] = b[i][j];

}
void multiply(long long A[3][3], long long B[3][3], long long C[3][3]){
    for(int i = 0; i <= 2; i ++)
        for(int j = 0; j <= 2; j ++){
            C[i][j] = 0;
            for(int k = 0; k <= 2; k ++)
                {
                    C[i][j] += (A[i][k] * B[k][j]) % MOD;
                    C[i][j] %= MOD;
                }
        }
}
int main()
{
    fin >> T;

    for(int i2 = 1; i2 <= T; i2 ++){

        fin >> X >> Y >> Z >> a >> b >> c >> n;
        long long A[3][3] = { {a, b, c} , {1, 0, 0}, {0, 1, 0} };
        long long r[3][3] = { {1, 0, 0} , {0, 1, 0}, {0, 0, 1} };
        long long B[3][3];
        n -= 2;
        while(n){
            if(n % 2 != 0)
            {
                multiply(r, A, B);
                cpy(r,B);
            }
            multiply(A,A,B);
            cpy(A,B);
            n /= 2;
        }
        fout << (((r[0][0] * Z) % MOD + r[0][1] * Y) % MOD + r[0][2] * X) % MOD << '\n';
    }
    return 0;
}