Pagini recente » Cod sursa (job #528793) | Cod sursa (job #2506452) | Cod sursa (job #1267523) | Istoria paginii runda/racovita_mini_vacanta_10/clasament | Cod sursa (job #1516977)
# include <bits/stdc++.h>
using namespace std;
struct matrice {
int n,m;
long long a[5][5];
matrice () {
for (int i=1;i<5;++i)
for (int j=1;j<5;j++) a[i][j] = 0;
}
} init, M;
int tests;
int n;
int A, B, C, X , Y , Z;
const int MOD = 666013;
ifstream fi("iepuri.in");
ofstream fo("iepuri.out");
matrice mult(matrice A, matrice B) {
matrice C;
C.n = A.n; C.m = B.m;
for (int i=1;i<=C.n;++i)
for (int j=1;j<=C.m;j++) {
C.a[i][j] = 0;
for (int k=1;k<=A.m;k++)
{
C.a[i][j] += (A.a[i][k] * B.a[k][j]) % MOD;
C.a[i][i] %= MOD;
}
}
return C;
}
matrice pow(matrice M, int n)
{
if (n==1) return M;
if (n & 1) return mult(pow(M, n-1), M);
matrice Aux = pow(M, n/2);
return mult(Aux, Aux);
}
void afis(matrice A) {
fo << "\n";
fo << A.n << " " << A.m << "\n";
for(int i=1;i<=A.n;i++,cout<<"\n")
for(int j=1;j<=A.m;j++) cout <<A.a[i][j] << " ";
cout<<"\n";
}
int main()
{
fi >> tests;
while (tests--) {
for (int i=1;i<=3;++i) init.a[1][i]=0;
for(int i=1;i<=3;++i) for (int j=1;j<=3;j++) M.a[i][j] = 0;
fi >> X >> Y >> Z >> A >> B >> C >> n;
init.n = 1; init.m = 3;
init.a[1][1] = X; init.a[1][2] = Y; init.a[1][3] = Z;
M.n = M.m = 3;
M.a[2][1] = M.a[3][2] = 1;
M.a[1][3] = C; M.a[2][3] = B; M.a[3][3] = A;
// fo << pow(M, n).a[1][1] << "\n";
matrice CS = pow(M,n);
// fo << CS.a[1][1] << "\n";
// fo << CS.n << " " << CS.m << "\n";
// fo << init.n << " " << init.m << "\n";
// afis(CS);
CS = mult(init, CS);
fo << CS.a[1][1] << "\n";
}
return 0;
}