Cod sursa(job #3251277)

Utilizator tudorhTudor Horobeanu tudorh Data 25 octombrie 2024 16:17:33
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int I[3][3],base[3],I0[2][3]={{0,1,0},{0,0,1}};
int mod=666013;
void inmultire(int v1[][3],int v2[][3])
{
    int r[3][3]={0};
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
                r[i][j]=(r[i][j]+1ll*v1[i][k]*v2[k][j]%mod)%mod;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            v1[i][j]=r[i][j];
}
int putere(int power)
{
    int r[3][3]={{1,0,0},{0,1,0},{0,0,1}};
    while(power)
    {
        if(power%2)
            inmultire(r,I);
        inmultire(I,I);
        power/=2;
    }
    int res=0;
    for(int k=0;k<3;k++)
        res=(res+1ll*base[k]*r[2][k]%mod)%mod;
    return res;
}
void testcase()
{
    int X,Y,Z,A,B,C,N;
    fin>>X>>Y>>Z>>A>>B>>C>>N;
    for(int i=0;i<2;i++)
        for(int j=0;j<3;j++)
            I[i][j]=I0[i][j];
    I[2][0]=C,I[2][1]=B,I[2][2]=A;
    base[0]=X,base[1]=Y,base[2]=Z;
    fout<<putere(N-2)<<'\n';
}
int main()
{
    int tc;
    fin>>tc;
    while(tc--)
        testcase();
    return 0;
}