Cod sursa(job #804592)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 29 octombrie 2012 23:06:16
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>
#define MOD 666013

using namespace std;

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

long long Rez[4][4],M[4][4],Aux[4][4];

int main()
{
    int T,X,Y,Z,A,B,C,N;
    int i,j,k;
    in>>T;

    while(T--)
    {
        in>>X>>Y>>Z>>A>>B>>C>>N;
        M  [0][0] = 0,M  [0][1] = 0,M  [0][2] = C,M  [1][0] = 1,M  [1][1] = 0,M  [1][2] = B,M  [2][0] = 0,M  [2][1] = 1,M  [2][2] = A;
        Rez[0][0] = 1,Rez[0][1] = 0,Rez[0][2] = 0,Rez[1][0] = 0,Rez[1][1] = 1,Rez[1][2] = 0,Rez[2][0] = 0,Rez[2][1] = 0,Rez[2][2] = 1;
        N-=2;
        for(;N;N/=2)
        {
            for(i=0;i<3;i++)
                    for(j=0;j<3;j++)Aux[i][j] = 0;
            if(N&1)//daca bitul e 1 Rez = Rez * M
            {
                for(i=0;i<3;i++)
                    for(j=0;j<3;j++)
                        for(k=0;k<3;k++)
                        {
                            Aux[i][j]+=Rez[i][k]*M[k][j]%MOD;
                            Aux[i][j]%=MOD;
                        }
                for(i=0;i<3;i++)
                    for(j=0;j<3;j++)
                        Rez[i][j] = Aux[i][j];
            }
            for(i=0;i<3;i++)
                    for(j=0;j<3;j++)Aux[i][j] = 0;
            for(i=0;i<3;i++)
                for(j=0;j<3;j++)
                    for(k=0;k<3;k++)
                    {
                        Aux[i][j]+=M[i][k]*M[k][j];
                        Aux[i][j]%=MOD;
                    }
            for(i=0;i<3;i++)
                for(j=0;j<3;j++)
                    M[i][j] = Aux[i][j];


        }
        out<<(X*Rez[0][2]+Y*Rez[1][2]+Z*Rez[2][2])%MOD<<'\n';

    }
    return 0;
}