Cod sursa(job #2492528)

Utilizator MikelusBadu Mihai Mikelus Data 14 noiembrie 2019 21:04:54
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    long long int X, Y, Z, N, a[3][3], b[3][3],aux[3][3], sol[3][1], aux2[3][1];
    short int T, A, B, C, j, k, h, i;
    ifstream f("iepuri.in");
    f>>T;
    ofstream g("iepuri.out");
    for(i=1; i<=T; i++)
    {
        f>>X>>Y>>Z>>A>>B>>C>>N;
        N-=2;
        a[0][0]=A;
        a[0][1]=B;
        a[0][2]=C;
        a[1][0]=1;
        a[1][1]=0;
        a[1][2]=0;
        a[2][0]=0;
        a[2][1]=1;
        a[2][2]=0;
        sol[0][0]=Z;
        sol[1][0]=Y;
        sol[2][0]=X;
        for(j=0; j<=2; j++)
            for(h=0; h<=2; h++)
            {
                if(j==h)
                    b[j][h]=1;
                else
                    b[j][h]=0;
                aux[j][h]=0;
                aux2[j][0]=0;
            }
        while(N)
        {
            if(N%2==1)
            {
                for(j=0; j<=2; j++)
                    for(h=0; h<=2; h++)
                        for(k=0; k<=2; k++)
                            aux[j][h]+=b[j][k]*a[k][h];
                for(j=0; j<=2; j++)
                    for(h=0; h<=2; h++)
                    {
                        b[j][h]=aux[j][h]%666013;
                        aux[j][h]=0;
                    }
                N--;
            }
            for(j=0; j<=2; j++)
                for(h=0; h<=2; h++)
                    for(k=0; k<=2; k++)
                        aux[j][h]+=a[j][k]*a[k][h];
            for(j=0; j<=2; j++)
                for(h=0; h<=2; h++)
                {
                    a[j][h]=aux[j][h]%666013;
                    aux[j][h]=0;
                }
            N=N/2;
        }
        for(j=0; j<=2; j++)
                for(k=0; k<=2; k++)
                {
                    aux2[j][0]+=b[j][k]*sol[k][0];
                }
        aux2[0][0]=aux2[0][0]%666013;
        g<<aux2[0][0]<<endl;
    }
    return 0;
}