Pagini recente » Cod sursa (job #1626425) | Cod sursa (job #2241268) | Cod sursa (job #2221613) | Cod sursa (job #979837) | Cod sursa (job #2450792)
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 666013
using namespace std;
FILE *IN;
int T;
int X, Y, Z, A, B, C, N;
int finmat[3][3], mat[3][3], matx[3][3];
int sign, pos;
char f[MAX];
inline void Read(int &nr){
sign = 0;
nr = 0;
while(f[pos] < '0' || f[pos] > '9'){
if(f[pos] == '-') sign=1;
pos++;
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
while(f[pos] >= '0' && f[pos] <= '9'){
nr = 10 * nr + f[pos++] - '0';
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
if(sign) nr =- nr;
}
int matrixmult(int mat1[3][3], int mat2[3][3]){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
finmat[i][j] = ((mat1[i][0] * mat2[0][j] % MOD + mat1[i][1] * mat2[1][j] % MOD) % MOD + mat1[i][2] * mat2[2][j] % MOD ) % MOD;
}
}
}
int initmat(){
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
mat[i][j] = 0;
mat[0][0] = A; mat[0][1] = 1;
mat[1][0] = B; mat[1][2] = 1;
mat[2][0] = C;
}
int cpmat(int mat1[3][3], int finmat1[3][3]){
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
mat1[i][j] = finmat1[i][j];
}
int afis(int mx[3][3]){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
printf("%d ", mx[i][j]);
}
printf("\n");
}
printf("\n");
}
int lgput(int N){
if(N != 1){
if(N % 2 == 0){
matrixmult(mat, mat); cpmat(mat, finmat);
lgput(N / 2);
} else {
cpmat(matx, mat);
matrixmult(mat, mat); cpmat(mat, finmat);
lgput((N - 1) / 2);
matrixmult(matx, mat);
cpmat(mat, finmat);
}
}
}
int main(){
IN = fopen("iepuri.in", "r");
freopen("iepuri.out", "w", stdout);
Read(T);
for(int i = 1; i <= T; i++){
Read(X); Read(Y); Read(Z);
Read(A); Read(B); Read(C);
Read(N);
initmat(); lgput(N - 2);
int ans[3][3] = {Z, Y, X};
matrixmult(ans, mat);
printf("%d\n", finmat[0][0]);
}
return 0;
}