Cod sursa(job #1388831)

Utilizator cautionPopescu Teodor caution Data 15 martie 2015 19:12:29
Problema Iepuri Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#define MOD 666013
using namespace std;
long long a[10], x[10], aux1[10], aux2[10];
void multiply_matrix(long long *a, long long *b)
{
    for(short i=1; i<=9; ++i)
    {
        aux1[i]=a[i];
        aux2[i]=b[i];
    }
    a[1]=aux1[1]*aux2[1]+aux1[2]*aux2[4]+aux1[3]*aux2[7];
    a[2]=aux1[1]*aux2[2]+aux1[2]*aux2[5]+aux1[3]*aux2[8];
    a[3]=aux1[1]*aux2[3]+aux1[2]*aux2[6]+aux1[3]*aux2[9];
    a[4]=aux1[4]*aux2[1]+aux1[5]*aux2[4]+aux1[6]*aux2[7];
    a[5]=aux1[4]*aux2[2]+aux1[5]*aux2[5]+aux1[6]*aux2[8];
    a[6]=aux1[4]*aux2[3]+aux1[5]*aux2[6]+aux1[6]*aux2[9];
    a[7]=aux1[7]*aux2[1]+aux1[8]*aux2[4]+aux1[9]*aux2[7];
    a[8]=aux1[7]*aux2[2]+aux1[8]*aux2[5]+aux1[9]*aux2[8];
    a[9]=aux1[7]*aux2[3]+aux1[8]*aux2[6]+aux1[9]*aux2[9];
    for(short i=1; i<=9; ++i) a[i]%=MOD;
}
int main()
{
    ifstream in("iepuri.in");
    ofstream out("iepuri.out");
    long t, A, B, C, X, Y, Z, n, result;
    in>>t;
    for(short i=0; i<t; ++i)
    {
        in>>X>>Y>>Z>>A>>B>>C>>n;
        a[1]=1; a[2]=0; a[3]=0;
        a[4]=0; a[5]=1; a[6]=0;
        a[7]=0; a[8]=0; a[9]=1;
        x[1]=0; x[2]=0; x[3]=C;
        x[4]=1; x[5]=0; x[6]=B;
        x[7]=0; x[8]=1; x[9]=A;
        while(n)
        {
            if(n%2)
                multiply_matrix(a, x);
            multiply_matrix(x, x);
            n>>=1;
        }
        result=X*a[1]+Y*a[4]+Z*a[7];
        result%=MOD;
        out<<result<<endl;
    }
    in.close(); out.close();
    return 0;
}