Cod sursa(job #2506114)

Utilizator cosmin1972Nour Mihai-Cosmin cosmin1972 Data 7 decembrie 2019 15:26:34
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long n,mat[5][5],m[5][5];

void inm(long long mat1[5][5],long long mat2[5][5])
{
    long long c[5][5];
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            c[i][j]=0;
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            for(int k=1;k<=3;k++)
            {
                c[i][j]+=mat1[i][k]*mat2[k][j]%666013;
            }
            c[i][j]%=666013;
        }
    }
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            mat1[i][j]=c[i][j];
}

void power(long long mat[5][5],long long p)
{
    while(p>0)
    {
        if(p%2==0)
        {
            inm(mat,mat);
            p/=2;
        }
        else
        {
            inm(m,mat);
            p--;
        }
    }
}

int main()
{
    in>>n;
    for(int i=1;i<=n;i++)
    {
        long long x,y,z,a,b,c,nr;
        in>>x>>y>>z>>a>>b>>c>>nr;
        mat[2][1]=mat[3][2]=1;
        mat[1][3]=c;
        mat[2][3]=b;
        mat[3][3]=a;
        mat[1][1]=mat[1][2]=mat[2][2]=mat[3][1]=0;
        m[1][1]=m[2][2]=m[3][3]=1;
        m[1][2]=m[1][3]=m[2][1]=m[2][3]=m[3][1]=m[3][2]=0;
        power(mat,nr-2);
        out<<(m[1][3]*x+m[2][3]*y+m[3][3]*z)%666013<<'\n';
    }
    return 0;
}