Cod sursa(job #2866388)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 9 martie 2022 17:45:37
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>

#define MOD 666013

using namespace std;

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

int t, n, xs, ys, zs, a, b, c;
int f[5][5], r[5][5], bz[5][5], aux[5][5];

void copiere(int x[5][5], int y[5][5]) {
    for (int i=0; i<3; i++)
        for (int j=0; j<3; j++)
            x[i][j]=y[i][j];
}

void init() {
    f[0][0]=a;
    f[0][1]=b;
    f[0][2]=c;
    f[1][0]=1;
    f[1][1]=0;
    f[1][2]=0;
    f[2][0]=0;
    f[2][1]=1;
    f[2][2]=0;
    copiere(r, f);
    copiere(bz, f);
}

void mult(int x[5][5], int y[5][5], int z[5][5]) {
    for (int i=0; i<3; i++)
        for (int j=0; j<3; j++)
            z[i][j]=0;
    for (int i=0; i<3; i++)
        for (int j=0; j<3; j++)
            for (int k=0; k<3; k++)
                z[i][j]=(z[i][j]+(x[i][k]*y[k][j])%MOD)%MOD;
}

void puteri() {
    if (n==0)
        fout<<xs<<"\n";
    else if (n==1)
        fout<<ys<<"\n";
    else if (n==2)
        fout<<zs<<"\n";
    else {
        n-=2;
        while (n) {
            if (n%2==0) {
                mult(bz, bz, aux);
                copiere(bz, aux);
                n/=2;
            } else {
                mult(r, f, aux);
                copiere(r, aux);
                n--;
            }
        }
        for (int i=0; i<3; i++) {
            for (int j=0; j<3; j++)
                fout<<r[i][j]<<" ";
            fout<<"\n";
        }
        fout<<((zs*r[0][0])%MOD+(ys*r[0][1])%MOD+(xs*r[0][2])%MOD)%MOD<<"\n";
    }
}

void citire() {
    fin>>t;
    for (int i=0; i<t; i++) {
        fin>>xs>>ys>>zs>>a>>b>>c>>n;
        init();
        puteri();
    }
}

int main() {
    citire();
    return 0;
}