Cod sursa(job #3351365)

Utilizator stefan_ciureaStefan Ciurea stefan_ciurea Data 18 aprilie 2026 19:31:58
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD=666013;

int t,x,y,z,a,b,c,n;
int rez[3][3],unit[3][3],imat[3][3],aux[3][3];

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

void binexp(int base[3][3], int exp) {
    while (exp) {
        if (exp&1) {
            for (int i=0; i<3; ++i)
                for (int j=0; j<3; ++j) {
                    int s=0;
                    for (int k=0; k<3; ++k)
                        s+=base[i][k]*1LL*rez[k][j]%MOD;
                    aux[i][j]=s;
                }
            copymat(rez,aux);
        }
        exp>>=1;
        for (int i=0; i<3; ++i)
            for (int j=0; j<3; ++j) {
                int s=0;
                for (int k=0; k<3; ++k)
                    s+=base[i][k]*1LL*base[k][j]%MOD;
                aux[i][j]=s;
            }
        copymat(base,aux);
    }
}

int main() {
    ifstream fin("iepuri.in");
    ofstream fout("iepuri.out");
    fin>>t;
    unit[0][0]=unit[1][1]=unit[2][2]=1;
    while (t--) {
        fin>>x>>y>>z>>a>>b>>c>>n;
        imat[0][0]=0; imat[0][1]=1; imat[0][2]=0;
        imat[1][0]=0; imat[1][1]=0; imat[1][2]=1;
        imat[2][0]=c; imat[2][1]=b; imat[2][2]=a;
        copymat(rez,unit);
        binexp(imat,n-2);
        int ans=(x*1LL*rez[2][0]%MOD + y*1LL*rez[2][1]%MOD + z*1LL*rez[2][2]%MOD)%MOD;
        fout<<ans<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}