Pagini recente » Borderou de evaluare (job #342811) | Borderou de evaluare (job #1360215) | Borderou de evaluare (job #1530388) | Borderou de evaluare (job #2810641) | Cod sursa (job #3288513)
#include <fstream>
using namespace std;
const int MOD = 666013;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
int adj[3][3];
void init(int a, int b, int c) {
adj[0][0] = 0, adj[0][1] = 0, adj[0][2] = c;
adj[1][0] = 1, adj[1][1] = 0, adj[1][2] = b;
adj[2][0] = 0, adj[2][1] = 1, adj[2][2] = a;
}
void inmultire(int a[3][3], int b[3][3]) {
int c[3][3];
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
c[i][j] = 0;
for(int k = 0; k < 3; k++)
c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % MOD;
}
}
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
a[i][j] = c[i][j];
}
int p[3][3];
void logexp(int n) {
for(int i = 0; i < 3; i++) ///init
for(int j = 0; j < 3; j++)
p[i][j] = 0;
p[0][0] = p[1][1] = p[2][2] = 1;
for(int k = 1; k <= n; k <<= 1) {
if(n & k)
inmultire(p, adj);
inmultire(adj, adj);
}
}
void print(int a[3][3]) {
cout << '\n';
cout << "PRINT\n";
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
cout << a[i][j] << " ";
}
cout << '\n';
}
}
int main()
{
int t;
cin >> t;
while(t--) {
int x, y, z, a, b, c, n;
cin >> x >> y >> z; ///in zilele 0, 1, 2
cin >> a >> b >> c; ///inmultirile
cin >> n;
init(a, b, c);
logexp(n - 2);
long long ans = (x * p[0][2] + y * p[1][2] + z * p[2][2]) % MOD;
cout << ans << '\n';
}
return 0;
}