Cod sursa(job #2568631)

Utilizator RedXtreme45Catalin RedXtreme45 Data 4 martie 2020 08:50:41
Problema Iepuri Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <cstring>
#define mod 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long int n,t,x,y,z,a,b,c;
long long int  M[5][5],sol[5][5];
void inmultire (long long int A[5][5],long long int B[5][5])
{
    long long int aux[5][5]={0};
    for (int i1=1; i1<=3; i1++)
    {
        for (int j1=1; j1<=3; j1++)
        {
            int S=0;
            for (int i=1; i<=3; i++)
                S=(S+(A[i1][i]*B[i][j1])%mod)%mod;
            aux[i1][j1]=S;
        }
    }
    for (int i1=1;i1<=3;i1++)
        for (int j1=1;j1<=3;j1++)
            A[i1][j1]=aux[i1][j1];
}
void ridicare_n()
{
    memset(sol,0,sizeof sol);
    sol[1][1]=sol[2][2]=sol[3][3]=1;
    for (int i=0; (1<<i)<=n; i++)
    {
        if (((1<<i)&n)>0)
            inmultire(sol,M);
        inmultire(M,M);
    }
}
int main()
{
    int i,j;
    fin>>t;
    for (i=1; i<=t; i++)
    {
        fin>>x>>y>>z>>a>>b>>c>>n;
        memset(M,0,sizeof M);
        M[1][2]=M[2][3]=1;
        M[3][1]=c;
        M[3][2]=b;
        M[3][3]=a;
        ridicare_n();
        fout<<((sol[1][1]*x)%mod+(sol[1][2]*y)%mod+(sol[1][3]*z)%mod)%mod<<"\n";
    }
    return 0;
}