Cod sursa(job #3369917)

Utilizator Radu_GrigorieGrigorie Radu Stefan Radu_Grigorie Data 22 octombrie 2026 14:08:07
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long t, x, y, z, a, b, c, n;
const long long MOD=666013;
void atribuire(long long a[3][3], long long b[3][3])
{
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            a[i][j]=b[i][j];
        }
    }
}
void inmultire(long long a[3][3], long long b[3][3], long long c[3][3])
{
    long long temp[3][3]={0};
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            for(int k=0; k<3; k++)
            {
                temp[i][j]=(temp[i][j]+a[i][k]*b[k][j])%MOD;
            }
        }
    }
    atribuire(c, temp);
}
void putere(long long a[3][3], long long p, long long rez[3][3])
{
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
            rez[i][j]=0;
        rez[i][i]=1;
    }
    long long base[3][3];
    atribuire(base, a);
    while(p>0)
    {
        if(p&1)
        {
            long long temp[3][3];
            inmultire(rez, base, temp);
            atribuire(rez, temp);
        }
        long long temp[3][3];
        inmultire(base, base, temp);
        atribuire(base, temp);
        p/=2;
    }
}
int main()
{
    fin >> t;
    for(int i=1; i<=t; i++)
    {
        fin >> x >> y >> z >> a >> b >> c >> n;
        long long m[3][3]={
            {a, b, c},
            {1, 0, 0},
            {0, 1, 0}
        };
        long long rez[3][3];
        putere(m, n-2, rez);
        fout << (rez[0][0]*z+rez[0][1]*y+rez[0][2]*x)%MOD << "\n";
    }
    return 0;
}