Pagini recente » Profil ikogames | Monitorul de evaluare | Autentificare | Clasament | Cod sursa (job #804523)
Cod sursa(job #804523)
#include <fstream>
#include <cstring>
using namespace std;
const int MOD = 666013;
ifstream in("iepuri.in");
ofstream out("iepuri.out");
int t,n,a,b,c,x,y,z,i,q,j;
int mat[3][3], mo[3][3];
void mmult(int a[][3], int b[][3], int c[][3]) {
static int i, j, k;
for(i=0; i<3; i++)
for(j=0; j<3; j++) {
a[i][j] = 0;
for(k=0; k<3; k++)
a[i][j] = (a[i][j] + (b[i][k] * c[k][j])%MOD)%MOD;
}
}
void mpow(int m[][3], int mo[][3], int n) {
static int p[3][3];
if(n == 1)
return;
mpow(m, mo, n/2);
mmult(p, m, m);
if(n%2 == 1) {
mmult(m, p, mo);
} else {
memcpy(m, p, sizeof(m[0][0])*9);
}
}
int main() {
in>>t;
while(t--) {
in>>x>>y>>z>>a>>b>>c>>n;
mat[0][0] = 0;
mat[0][1] = 1;
mat[0][2] = 0;
mat[1][0] = 0;
mat[1][1] = 0;
mat[1][2] = 1;
mat[2][0] = c;
mat[2][1] = b;
mat[2][2] = a;
for(i=0; i<3; i++) {
for(j=0; j<3; j++)
mo[i][j] = mat[i][j];
}
mpow(mat, mo, n);
a = (mat[0][0] * x + mat[0][1] * y + mat[0][2] * z)%MOD;
out<<a<<'\n';
}
}