Cod sursa(job #2006750)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 31 iulie 2017 15:23:02
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<fstream>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
long long sol,n,A,B,C,x,y,z,i,t;
long long a[3][3],b[3][3],c[3][3];
void inmultire(long long d[3][3],long long f[3][3],long long g[3][3]){
    for(int i=0;i<=2;i++){
        for(int j=0;j<=2;j++){
            g[i][j]=0;
            for (int q=0;q<=2;q++){
                g[i][j]+=d[i][q]*f[q][j];
                g[i][j]%=666013;
            }
        }
    }
}

void copiere(long long d[3][3],long long g[3][3]){
    for(int i=0;i<=2;i++){
        for(int j=0;j<=2;j++){
            d[i][j]=g[i][j];
        }
    }
}

int main(){
    fin>>t;
    for(i=1;i<=t;i++){
        fin>>x>>y>>z>>A>>B>>C>>n;
        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;
        b[0][0]=1;
        b[0][1]=0;
        b[0][2]=0;
        b[1][0]=0;
        b[1][1]=1;
        b[1][2]=0;
        b[2][0]=0;
        b[2][1]=0;
        b[2][2]=1;
        n-=2;
        while(n>=1){
            if(n%2==1){
                inmultire(a,b,c);
                copiere(b,c);
            }
            inmultire(a,a,c);
            copiere(a,c);
            n/=2;
        }
        sol=0;
        sol+=b[0][0]*z;
        sol%=666013;
        sol+=b[0][1]*y;
        sol%=666013;
        sol+=b[0][2]*x;
        sol%=666013;
        fout<<sol<<"\n";
    }
    return 0;
}