Cod sursa(job #3314160)

Utilizator bagae123Burlacu Andrei bagae123 Data 8 octombrie 2025 19:10:31
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include<vector>
using namespace std;
#define int long long
#define Matrix(x) vector<vector<int>>x
#define TofindMatrix vector<vector<int>>
#define MOD 666013

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
TofindMatrix Multiplicate3x3(Matrix(a),Matrix(b))
{
    Matrix(c);
    c.assign(3,vector<int>(3,0));
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            for(int k=0;k<3;k++)

             c[i][j]=(c[i][j]+a[i][k]*b[k][j])%MOD;
        }
    }
    return c;
}
TofindMatrix FastExpo(Matrix(A),int n)
{
    Matrix(p);
    p.assign(3, vector<int>(3,0));
    for(int i=0;i<3;i++) p[i][i] = 1;
    while(n)
    {
        if(n%2)p=Multiplicate3x3(p,A);
        A=Multiplicate3x3(A,A);
        n=n/2;
    }
    return p;
}

signed main()
{
    int testcases;
    fin>>testcases;

    while(testcases--)
    {
        int X,Y,Z,A,B,C,N;
        fin>>X>>Y>>Z>>A>>B>>C>>N;
        N=N-2;
        Matrix(reccurenceMatrix)=
        {
            {A,1,0},
            {B,0,1},
            {C,0,0}
        };
        vector<int>startValues;

        startValues.push_back(Z);
        startValues.push_back(Y);
        startValues.push_back(X);

        reccurenceMatrix=FastExpo(reccurenceMatrix,N);

        int solution=0;

        for(int i=0; i<3; i++)
        {
          solution=(solution+reccurenceMatrix[i][0]*startValues[i])%MOD;
        }

        fout<<solution<<"\n";
    }


    return 0;
}