Cod sursa(job #3253176)

Utilizator Andrei_Gagea08Andrei Gagea Andrei_Gagea08 Data 1 noiembrie 2024 19:22:08
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#define MOD 666013
#define int long long

using namespace std;

ifstream cin("iepuri.in");
ofstream cout("iepuri.out");

int v[3][3];
int a[3][3];
int r[3][3];

void f(int p)
{
    int i,j,k;
    if(p==0)
        return;
    if(p%2)
    {
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                for(k=0;k<3;k++)
                    r[i][j]=(r[i][j]+a[i][k]*v[k][j]%MOD)%MOD;
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
            {
                a[i][j]=r[i][j];
                r[i][j]=0;
            }
    }
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            for(k=0;k<3;k++)
                r[i][j]=(r[i][j]+v[i][k]*v[k][j]%MOD)%MOD;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            v[i][j]=r[i][j];
            r[i][j]=0;
        }
    f(p/2);
}

signed main()
{
    int n,qq,X,Y,Z,A,B,C,t;
    cin>>t;
    for(qq=1;qq<=t;qq++)
    {
        cin>>X>>Y>>Z>>A>>B>>C>>n;
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                a[i][j]=v[i][j]=0;
        a[0][0]=a[1][1]=a[2][2]=1;
        v[0][1]=v[1][2]=1;
        v[2][0]=C;
        v[2][1]=B;
        v[2][2]=A;

        f(n-2);
        cout<<a[2][0]*X+a[2][1]*Y+a[2][2]*Z<<'\n';
    }
    return 0;
}