Cod sursa(job #2560988)

Utilizator iliescualexiaIliescu Alexia iliescualexia Data 28 februarie 2020 14:20:28
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.08 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 n)
{
    int c[4][4];
    if(n==1)
        ;
    else
    {
        if(n%2==1)
        {
            inmultiremat(n/2);
            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)*(a[k][j]%m))%m;
                    }
                }
            }
            for(int i=1; i<=3; i++)
            {
                for(int j=1; j<=3; j++)
                {
                    a[i][j]=0;
                    for(int k=1; k<=3; k++)
                    {
                        a[i][j]+=((c[i][k]%m)*(b[k][j]%m))%m;
                    }
                }
            }

        }
        else
        {
            inmultiremat(n/2);
            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)*(a[k][j]%m))%m;
                    }
                }
            }
            for(int i=1; i<=3; i++)
            {
                for(int j=1; j<=3; j++)
                {
                    a[i][j]=c[i][j];
                }
            }
        }
    }
}
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-2;
        inmultiremat(n);
        rez=((x*a[1][3])%m+(y*a[2][3])%m+(z*a[3][3]))%m;
        fout<<rez<<'\n';
    }
    return 0;
}