Cod sursa(job #2398149)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 5 aprilie 2019 09:20:05
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#define mod 666013
using namespace std;

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

long long t,n,a,b,c,x,y,z,i;
long long p[4][4],v[4][4],aux[4][4];

inline void inm(long long a[4][4], long long b[4][4], long long c[4][4]){
    for(long long i=1;i<=3;i++)
        for(long long j=1;j<=3;j++){
            c[i][j]=0;

            for(long long k=1;k<=3;k++){
                c[i][j]+=a[i][k]*b[k][j];
                c[i][j]%=mod;
            }
        }
}

inline void atrib(long long a[4][4], long long b[4][4]){
    for(long long i=1;i<=3;i++)
        for(long long j=1;j<=3;j++)
            b[i][j]=a[i][j];
}

int main(){
    fin>>t;
    for(;t;t--){
        fin>>x>>y>>z>>a>>b>>c>>n;

        if(n==1){
            fout<<y<<"\n";
            continue;
        }
        if(n==2){
            fout<<z<<"\n";
            continue;
        }

        v[1][1]=a; v[1][2]=b; v[1][3]=c;
        v[2][1]=1; v[2][2]=0; v[2][3]=0;
        v[3][3]=0; v[2][3]=1; v[3][3]=0;

        p[1][1]=1; p[1][2]=0; p[1][3]=0;
        p[2][1]=0; p[2][2]=1; p[2][3]=0;
        p[3][1]=0; p[3][2]=0; p[3][3]=1;

        n-=2;
        while(n!=0){
            if(n%2==1){
                inm(p,v,aux);
                atrib(aux,p);
            }

            inm(v,v,aux);
            atrib(aux,v);

            n/=2;
        }

        fout<<(z*p[1][1]+y*p[1][2]+x*p[1][3])%mod<<"\n";
    }

    return 0;
}