Cod sursa(job #3162686)

Utilizator leelcheeseCiovnicu Denis leelcheese Data 29 octombrie 2023 17:51:28
Problema Iepuri Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
#define ll long long 
#define ull unsigned long long 
#define nmax 106
#define MOD 666013 
#define INF 2345678901
//#define fin cin 
//#define fout cout 

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");

int n, X, Y, Z, A, B, C;
int a[3][3];
int b[3][3];
int p[3][3];

void Produs(int a[3][3], int b[3][3], int c[3][3])
{
    int i, j, k;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
        {
            c[i][j] = 0;
            for (k = 0; k < 3; k++)
                c[i][j] = (c[i][j] + 1ll * a[i][k] * b[k][j]) % MOD;
        }

}

void Copy(int a[3][3], int b[3][3])
{
    int i, j;
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            a[i][j] = b[i][j];
}

void Put(int n)
{
    // Matricea I3
    p[0][0] = p[1][1] = p[2][2] = 1;
    p[0][1] = p[0][2] = p[1][0] = p[1][2] = p[2][0] = p[2][1] = 0;
    while (n > 0)
    {
        if (n % 2 == 1)
        {
            Produs(p, a, b);
            Copy(p, b);
        }
        n /= 2;
        Produs(a, a, b);
        Copy(a, b);
    }
}

void Task()
{
    int sol;
    fin >> X >> Y >> Z >> A >> B >> C >> n;
    a[0][0] = a[1][0] = a[1][1] = a[0][2] = 0;
    a[0][1] = a[1][2] = 1;
    a[2][0] = C;
    a[2][1] = B;
    a[2][2] = A;
    Put(n - 2);
    sol = (p[2][0] * X + p[2][1] * Y + p[2][2] * Z) % MOD;
    fout << sol << "\n";
    /*for (int i = 0; i < 3; i++, fout << "\n")
        for (int j = 0; j < 3; j++)
            fout << p[i][j] << " ";
    fout << "\n\n";*/
}

int main()
{
    int t;
    fin >> t;
    while (t--)
        Task();
    fin.close();
    fout.close();
    return 0;
}