Cod sursa(job #2560770)

Utilizator iliescualexiaIliescu Alexia iliescualexia Data 28 februarie 2020 11:32:07
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 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;
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]%666013)*(b[k][j]%666013))%666013;
            }
        }
    }
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            a[i][j]=c[i][j];
        }
    }
}
int main()
{
    fin>>t;
    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;
            }
            if(n!=0)
            {
                inmultiremat(a,a);
                n=n/2;
            }

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

    return 0;
}