Cod sursa(job #2698908)

Utilizator DesertChuStefan Andrei DesertChu Data 23 ianuarie 2021 11:17:56
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define ll long long
#define mod 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
ll a[3][3];
ll c[3][3];
ll sol[3][3]={{1,0},{0,1}};
int N,t,A,B,C,X,Y,Z;
void inmult(ll a[3][3],ll b[3][3])
{
    ll c[3][3];
    int i,j,k;
    for(i=0;i<=2;i++)
    {
        for(j=0;j<=2;j++)
        {
            c[i][j]=0;
            for(k=0;k<=2;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
                c[i][j]%=mod;
            }
        }
    }
    for(i=0;i<=2;i++)
        for(j=0;j<=2;j++) a[i][j]=c[i][j];
}
void putere(ll sol[3][3],int k)
{
    while(k)
    {
        if(k%2==1)
        {
            inmult(sol,c);
            k--;
        }
        else
        {
            inmult(c,c);
            k/=2;
        }
    }
}
int main()
{
    f>>t;
    while(t)
    {
        f>>X>>Y>>Z>>A>>B>>C>>N;
        memset(sol,0,sizeof(sol));
        memset(a,0,sizeof(a));
        sol[0][0]=sol[1][1]=sol[2][2]=1;

        c[0][0]=c[0][1]=0;
        c[0][2]=C;
        c[1][0]=1;
        c[1][1]=0;
        c[1][2]=B;
        c[2][0]=0;
        c[2][1]=1;
        c[2][2]=A;

        a[0][0]=X;
        a[0][1]=Y;
        a[0][2]=Z;

        putere(sol,N);
        inmult(a,sol);
        cout<<a[0][0]<<'\n';
        t--;
    }
    return 0;
}