Cod sursa(job #3000159)

Utilizator roberttrutaTruta Robert roberttruta Data 12 martie 2023 00:39:44
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>

using namespace std;

int mod = 666013;
long long m[3][3];
long long v[3];

void init_matrix(int a, int b, int c){
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            m[i][j] = 0;
    m[0][0]=a;
    m[0][1]=b;
    m[0][2]=c;
    m[1][0]=1;
    m[2][1]=1;
}

void matrix_mul()
{
    long long r[3][3];
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
        {
            long long s = 0;
            for(int t=0; t<3; t++)
            {
                s += m[i][t] * m[t][j];
                s %= mod;
            }
            r[i][j] = s;
        }
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            m[i][j] = r[i][j];
}
void vect_mul()
{
    long long r[3];
    for(int i=0; i<3; i++)
    {
        long long s = 0;
        for(int j=0; j<3; j++)
        {
            s += m[i][j] * v[j];
            s %= mod;
        }
        r[i] = s;
    }
    for(int i=0; i<3; i++)
        v[i] = r[i];
}
void matrix_pow(int pw){
    while(pw){
        if(pw%2 == 1){
            vect_mul();
            pw --;
        }
        matrix_mul();
        pw/=2;
    }
}

int main()
{
    ifstream f("iepuri.in");
    ofstream g("iepuri.out");

    int t,x,y,z,a,b,c,n;
    f>>t;
    for(int i=0; i<t; i++){
        f>>x>>y>>z>>a>>b>>c>>n;
        v[0]=z;
        v[1]=y;
        v[2]=x;
        init_matrix(a,b,c);
        matrix_pow(n-2);
        g<<v[0]<<'\n';
    }


    return 0;
}