Pagini recente » Cod sursa (job #2331688) | Cod sursa (job #285314) | Cod sursa (job #2337118) | Cod sursa (job #542065) | Cod sursa (job #3265192)
#include <fstream>
#define mod 666013
#define int long long
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int a[4][4], sol[4][4], v[3];
void inmultire(int a[4][4], int b[4][4]) {
int c[4][4] = {0};
for (int i = 0; i < 3; i++) { // Modificat de la 1 la 0 pentru a respecta indexarea standard
for (int j = 0; j < 3; j++) { // Modificat de la 1 la 0
int val = 0;
for (int k = 0; k < 3; k++) { // Modificat de la 1 la 0
val = (val + a[i][k] * b[k][j]) % mod;
}
c[i][j] = val;
}
}
for (int i = 0; i < 3; i++) { // Modificat de la 1 la 0
for (int j = 0; j < 3; j++) { // Modificat de la 1 la 0
a[i][j] = c[i][j];
}
}
}
void power(int n) {
while (n) {
if (n % 2) inmultire(sol, a);
n /= 2;
inmultire(a, a);
}
}
signed main() {
int q;
f >> q;
while (q--) {
f >> v[0] >> v[1] >> v[2];
int x, y, z, k;
f >> x >> y >> z >> k;
if (k == 0) {
g << v[0] % mod << '\n';
continue;
}
if (k == 1) {
g << v[1] % mod << '\n';
continue;
}
if (k == 2) {
g << v[2] % mod << '\n';
continue;
}
for (int i = 0; i < 3; i++) { // Modificat de la 1 la 0
for (int j = 0; j < 3; j++) { // Modificat de la 1 la 0
if (i != j) sol[i][j] = 0;
else sol[i][j] = 1;
}
}
for (int i = 0; i < 3; i++) { // Modificat de la 1 la 0
for (int j = 0; j < 3; j++) { // Modificat de la 1 la 0
a[i][j] = 0;
}
}
// Inițializăm matricea de tranziție
a[1][0] = a[2][1] = 1; // Corectarea matricii pentru a respecta formula
a[0][2] = z; a[1][2] = y; a[2][2] = x;
power(k - 2);
// Calculăm numărul de iepuri pentru ziua k
g << (v[0] * sol[0][2] + v[1] * sol[1][2] + v[2] * sol[2][2]) % mod << '\n';
}
}