Pagini recente » Cod sursa (job #2149630) | Cod sursa (job #2130024)
#include <bits/stdc++.h>
#define modulo 666013
using namespace std;
ifstream fin ("iepuri.in");
ofstream fout ("iepuri.out");
/**
X -> ziua 0
Y -> ziua 1
Z -> ziua 2
ziua n -> A * ziua(n - 1) + B * ziua(n - 2) + C * ziua(n - 3)
INITIAL:
(X Y Z) (0 0 C)
a = (0 0 0) v = (1 0 B)
(0 0 0) (0 1 A)
rez = a * (v ^ (n - 2))
ziua n -> rez[1][3]
*/
int t, n, X, Y, Z, A, B, C;
int a[7][7], v[7][7];
inline void Reset(int mat[7][7])
{
int i, j;
for (i = 1; i <= 3; i++)
for (j = 1; j <= 3; j++)
mat[i][j] = 0;
}
inline void Inmultire(int x[7][7], int y[7][7])
{
int aux[7][7], i, j, k;
long long s;
for (i = 1; i <= 3; i++)
for (j = 1; j <= 3; j++)
{
s = 0;
for (k = 0; k <= 3; k++)
s += 1LL * x[i][k] * y[k][j];
aux[i][j] = s % modulo;
}
/// copiem
for (i = 1; i <= 3; i++)
for (j = 1; j <= 3; j++)
x[i][j] = aux[i][j];
}
void MatricePutere(int n)
{
int aux[7][7], i, j;
Reset(aux);
aux[1][1] = 1;
aux[2][2] = 1;
aux[3][3] = 1;
/// matricea unitate
while (n > 0)
{
if (n % 2)
Inmultire(aux, v);
Inmultire(v, v);
n /= 2;
}
for (i = 1; i <= 3; i++)
for (j = 1; j <= 3; j++)
v[i][j] = aux[i][j];
}
void Afisare(int x[7][7])
{ /// trebuie sa iasa ceva rau, deci verificam... ca doar mna... de ce nu?
for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
cout << x[i][j] << " ";
cout << "\n";
}
}
void Citire()
{
fin >> t;
while (t--)
{
fin >> X >> Y >> Z;
fin >> A >> B >> C;
fin >> n;
/// initializari
Reset(a);
Reset(v);
v[2][1] = v[3][2] = 1;
v[1][3] = C;
v[2][3] = B;
v[3][3] = A;
a[1][1] = X;
a[1][2] = Y;
a[1][3] = Z;
///rezolvare
MatricePutere(n - 2);
Inmultire(a, v);
/// raspuns
fout << a[1][3] << "\n";
}
}
int main()
{
Citire();
fin.close();
fout.close();
return 0;
}