Cod sursa(job #2128513)

Utilizator IsacLucianIsac Lucian IsacLucian Data 11 februarie 2018 19:43:24
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
#define Mod 666013

using namespace std;

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

int T,m[4][4],q[4][4],p[4][4];
int a,b,c,x,y,z,n;


void Inmultire(int x[4][4],int y[4][4],int s[4][4])
{
    int i,j,k,aux;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        {
            aux=0;
            for(k=1;k<=3;k++)
                aux+=(x[i][k]*y[k][j])%Mod;
            s[i][j]=aux%Mod;
        }

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            x[i][j]=s[i][j];
}

void Lgput(int n)
{
    while(n)
    {
        if(n%2)Inmultire(p,m,q);
        Inmultire(m,m,q);
        n/=2;
    }
}

void Initializare()
{
    m[1][1]=0;
    m[1][2]=0;
    m[1][3]=c;
    m[2][1]=1;
    m[2][2]=0;
    m[2][3]=b;
    m[3][1]=0;
    m[3][2]=1;
    m[3][3]=a;

    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            if(i==j)p[i][j]=1;
            else p[i][j]=0;
}

int main()
{
    fin>>T;
    while(T--)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        Initializare();
        Lgput(n-2);
        fout<<1LL*(x*p[1][3]%Mod+y*p[2][3]%Mod+z*p[3][3])%Mod<<"\n";
    }
    return 0;
}