Cod sursa(job #2560819)

Utilizator iliescualexiaIliescu Alexia iliescualexia Data 28 februarie 2020 12:01:57
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int a[4][4],i,t,z,x,y,A,B,C,n,b[4][4],rez,j,k,m;
void inmultiremat(int a[4][4],int b[4][4])
{
    int c[4][4];
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            c[i][j]=0;
            for(int k=1;k<=3;k++)
            {
                c[i][j]+=((a[i][k]%m)*(b[k][j]%m))%m;
            }
        }
    }
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {

            a[i][j]=c[i][j]%m;
        }
    }
}
int main()
{
    fin>>t;
    m=666013;
    for(i=1;i<=t;i++)
    {
        fin>>x>>y>>z>>A>>B>>C>>n;
        a[1][1]=a[3][1]=a[1][2]=a[2][2]=0;
        a[2][1]=a[3][2]=1;
        a[1][3]=C; a[2][3]=B; a[3][3]=A;
        for(k=1;k<=3;k++)
        {
            for(j=1;j<=3;j++)
            {
                b[k][j]=a[k][j];
            }
        }
        n=n-3;
        while(n!=0)
        {
            if(n%2==1)
            {
                inmultiremat(a,b);
                n=n-1;
            }
            else
            {
                if(n!=0)
                {
                    inmultiremat(a,a);
                    n=n/2;
                }
            }

        }
        rez=((x*a[1][3])%m+(y*a[2][3])%m+(z*a[3][3]))%m;
        fout<<rez<<'\n';
    }

    return 0;
}