Cod sursa(job #1613396)

Utilizator VladuZ1338Vlad Vlad VladuZ1338 Data 25 februarie 2016 13:03:13
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <cstring>

using namespace std;

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

const int mod = 666013;

int k, T, X, Y, Z, a, b, c, i1, i, j, q, sol, A[4][4], B[4][4], Zc[4][4];

void pat (int x)
{
    memset (B, 0, sizeof B);
    if (x==1)
    {
        for(i=1; i<=3; i++)
        {
             for(j=1; j<=3; j++)
             {
                 for(q=1; q<=3; q++)
                 {
                     B[i][j]=(B[i][j]+1LL*A[i][q]*A[q][j]%mod)%mod;
                 }
             }
        }
    }
    else if (x==0)
    {
        for(i=1; i<=3; i++)
        {
             for(j=1; j<=3; j++)
             {
                 for(q=1; q<=3; q++)
                 {
                     B[i][j]=(B[i][j]+1LL*A[i][q]*Zc[q][j]%mod)%mod;
                 }
             }
        }
    }
    memcpy (A, B, sizeof A);
}

void exp (int k)
{
    if (k==1);
    else if (k%2==0) {exp(k/2); pat(1);}
    else {exp(k-1); pat(0);}
}

int main()
{
    fin >> T;
    for (i1=1; i1<=T; i1++)
    {
        fin >> X >> Y >> Z >> a >> b >> c >> k;
        A[1][1]=A[1][2]=A[2][2]=A[3][1]=Zc[1][1]=Zc[1][2]=Zc[2][2]=Zc[3][1]=0; A[2][1]=A[3][2]=Zc[2][1]=Zc[3][2]=1; A[1][3]=Zc[1][3]=c; A[2][3]=Zc[2][3]=b; A[3][3]=Zc[3][3]=a;
        exp(k-2);
        sol=(1LL*X*A[1][3]%mod+1LL*Y*A[2][3]%mod+1LL*Z*A[3][3]%mod)%mod;
        fout << sol << "\n";
    }
}