Cod sursa(job #2718225)

Utilizator NeganAlex Mihalcea Negan Data 8 martie 2021 16:28:52
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int mod = 666013 ;
int k;
int a[5][5],b[5][5], z[5][5];
int X, Y, Z, A, B, C, N;
inline void Copiere(int a[5][5], int b[5][5])
{
    for(int i = 1; i <= 3; i++)
        for(int j = 1; j <= 3; j++)
            a[i][j] = b[i][j];
}

inline void Inmultire(int a[5][5], int b[5][5])
{
    int c[5][5];
    int i, j, k;
    long long s;
    for(i = 1; i <= 3; i++)
        for(j = 1; j <= 3; j++)
        {
            s = 0;
            for(k = 1; k <= 3; k++)
                s += (1LL* a[i][k] * b[k][j]);
            c[i][j] = s % mod;
        }
    Copiere(a, c);
}

inline void LogPow(int a[5][5],int n)
{
    int u[5][5];
    Copiere(u, z);
    u[1][1] = 1;
    u[2][2] = 1;
    u[3][3] = 1;
    while(n)
    {
        if(n % 2 == 1)
            Inmultire(u, a);
        Inmultire(a, a);
        n /= 2;
    }
    Copiere(a, u);
}


int main()
{
    int i, j, t;
    fin >> t;
    while(t--)
    {
        Copiere(a, z);
        Copiere(b, z);
        fin >> X >> Y >> Z >> A >> B >> C >> N;
        a[1][1] = X;
        a[1][2] = Y;
        a[1][3] = Z;
        b[2][1] = b[3][2] = 1;
        b[1][3] = C;
        b[2][3] = B;
        b[3][3] = A;
        LogPow(b,N - 2);
        Inmultire(a,b);
        fout << a[1][3] << "\n";
    }
    fout.close();
    return 0;
}