Cod sursa(job #1833133)

Utilizator AndreiTACAndrei Cristian AndreiTAC Data 21 decembrie 2016 19:14:40
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.87 kb
#include <fstream>
#define MOD 666013

using namespace std;

unsigned int i,j,t,x,y,z,a,b,c,n;
unsigned int m[3][3],aa[3][3],sol[3][3],aux[3][3];

int main()
{
    ifstream in("iepuri.in");
    ofstream out("iepuri.out");
    in>>t;
    for(i=0;i<t;i++)
        {
            in>>x>>y>>z>>a>>b>>c>>n;
            sol[0][0]=1;
            sol[0][1]=0;
            sol[0][2]=0;
            sol[1][0]=0;
            sol[1][1]=1;
            sol[1][2]=0;
            sol[2][0]=0;
            sol[2][1]=0;
            sol[2][2]=1;
            aa[0][0]=0;
            aa[0][1]=1;
            aa[0][2]=0;
            aa[1][0]=0;
            aa[1][1]=0;
            aa[1][2]=1;
            aa[2][0]=c;
            aa[2][1]=b;
            aa[2][2]=a;
            for(j=0;(1<<j)<n-1;++j)
                {
                    if(((1<<j)&(n-2))>0)
                        {
                            aux[0][0]=((sol[0][0]*aa[0][0])%MOD+(sol[0][1]*aa[1][0])%MOD+(sol[0][2]*aa[2][0])%MOD)%MOD;
                            aux[0][1]=((sol[0][0]*aa[0][1])%MOD+(sol[0][1]*aa[1][1])%MOD+(sol[0][2]*aa[2][1])%MOD)%MOD;
                            aux[0][2]=((sol[0][0]*aa[0][2])%MOD+(sol[0][1]*aa[1][2])%MOD+(sol[0][2]*aa[2][2])%MOD)%MOD;
                            aux[1][0]=((sol[1][0]*aa[0][0])%MOD+(sol[1][1]*aa[1][0])%MOD+(sol[1][2]*aa[2][0])%MOD)%MOD;
                            aux[1][1]=((sol[1][0]*aa[0][1])%MOD+(sol[1][1]*aa[1][1])%MOD+(sol[1][2]*aa[2][1])%MOD)%MOD;
                            aux[1][2]=((sol[1][0]*aa[0][2])%MOD+(sol[1][1]*aa[1][2])%MOD+(sol[1][2]*aa[2][2])%MOD)%MOD;
                            aux[2][0]=((sol[2][0]*aa[0][0])%MOD+(sol[2][1]*aa[1][0])%MOD+(sol[2][2]*aa[2][0])%MOD)%MOD;
                            aux[2][1]=((sol[2][0]*aa[0][1])%MOD+(sol[2][1]*aa[1][1])%MOD+(sol[2][2]*aa[2][1])%MOD)%MOD;
                            aux[2][2]=((sol[2][0]*aa[0][2])%MOD+(sol[2][1]*aa[1][2])%MOD+(sol[2][2]*aa[2][2])%MOD)%MOD;
                            sol[0][0]=aux[0][0];
                            sol[0][1]=aux[0][1];
                            sol[0][2]=aux[0][2];
                            sol[1][0]=aux[1][0];
                            sol[1][1]=aux[1][1];
                            sol[1][2]=aux[1][2];
                            sol[2][0]=aux[2][0];
                            sol[2][1]=aux[2][1];
                            sol[2][2]=aux[2][2];
                        }
                    aux[0][0]=((aa[0][0]*aa[0][0])%MOD+(aa[0][1]*aa[1][0])%MOD+(aa[0][2]*aa[2][0])%MOD)%MOD;
                    aux[0][1]=((aa[0][0]*aa[0][1])%MOD+(aa[0][1]*aa[1][1])%MOD+(aa[0][2]*aa[2][1])%MOD)%MOD;
                    aux[0][2]=((aa[0][0]*aa[0][2])%MOD+(aa[0][1]*aa[1][2])%MOD+(aa[0][2]*aa[2][2])%MOD)%MOD;
                    aux[1][0]=((aa[1][0]*aa[0][0])%MOD+(aa[1][1]*aa[1][0])%MOD+(aa[1][2]*aa[2][0])%MOD)%MOD;
                    aux[1][1]=((aa[1][0]*aa[0][1])%MOD+(aa[1][1]*aa[1][1])%MOD+(aa[1][2]*aa[2][1])%MOD)%MOD;
                    aux[1][2]=((aa[1][0]*aa[0][2])%MOD+(aa[1][1]*aa[1][2])%MOD+(aa[1][2]*aa[2][2])%MOD)%MOD;
                    aux[2][0]=((aa[2][0]*aa[0][0])%MOD+(aa[2][1]*aa[1][0])%MOD+(aa[2][2]*aa[2][0])%MOD)%MOD;
                    aux[2][1]=((aa[2][0]*aa[0][1])%MOD+(aa[2][1]*aa[1][1])%MOD+(aa[2][2]*aa[2][1])%MOD)%MOD;
                    aux[2][2]=((aa[2][0]*aa[0][2])%MOD+(aa[2][1]*aa[1][2])%MOD+(aa[2][2]*aa[2][2])%MOD)%MOD;
                    aa[0][0]=aux[0][0];
                    aa[0][1]=aux[0][1];
                    aa[0][2]=aux[0][2];
                    aa[1][0]=aux[1][0];
                    aa[1][1]=aux[1][1];
                    aa[1][2]=aux[1][2];
                    aa[2][0]=aux[2][0];
                    aa[2][1]=aux[2][1];
                    aa[2][2]=aux[2][2];
                }
            out<<((sol[2][0]*x)%MOD+(sol[2][1]*y)%MOD+(sol[2][2]*z)%MOD)%MOD<<"\n";
        }
    return 0;
}