Cod sursa(job #2258440)

Utilizator AlexTheDagonBogdan Tudor AlexTheDagon Data 11 octombrie 2018 13:52:59
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#define REP(i,n) for(int i=1;i<=n;++i)
using namespace std;

typedef long long ll;
typedef vector<vector<ll> > matrix;
const ll Nmax=10LL;
const ll prim=666013LL;

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

ll N,A,B,C,X1,X2,X3;
ll F[Nmax];
ll nrt;

matrix T(Nmax,vector<ll>(Nmax));


matrix Prod(matrix A,matrix B)
{
    matrix C(Nmax,vector<ll>(Nmax));
    REP(i,3)REP(j,3)REP(k,3)
        C[i][j]=(C[i][j]+A[i][k]*B[k][j])%prim;
    return C;
}

matrix lgput(matrix A,ll E)
{
    matrix sol(Nmax,vector<ll>(Nmax));
    REP(i,3)sol[i][i]=1;
    while(E)
    {
        if(E&1)sol=Prod(sol,A);
        A=Prod(A,A);
        E/=2;
    }
    return sol;
}


int main()
{
    in>>nrt;
    while(nrt--)
    {
        in>>X1>>X2>>X3>>A>>B>>C>>N;
        T[1][1]=0; T[1][2]=1; T[1][3]=0;
        T[2][1]=0; T[2][2]=0; T[2][3]=1;
        T[3][1]=C; T[3][2]=B; T[3][3]=A;

        F[1]=X1;
        F[2]=X2;
        F[3]=X3;

        ll sol=0;

        T=lgput(T,N-2);

        REP(i,3)sol+=T[3][i]*F[i];
        sol%=prim;

        out<<sol<<'\n';
    }




    return 0;
}