Cod sursa(job #1735371)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 29 iulie 2016 17:30:12
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
# include <fstream>
# define MOD 666013
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
int n,c,d,e,x,y,z,nr,p;
void copiere(long long a[3][3],long long b[3][3]){
    for(int i=0;i<=2;i++)
        for(int j=0;j<=2;j++)
            a[i][j]=b[i][j];
}
void inmultire(long long a[3][3],long long b[3][3],long long c[3][3]){
    for(int i=0;i<=2;i++)
        for(int j=0;j<=2;j++){
            c[i][j]=0;
            for(int k=0;k<=2;k++){
                c[i][j]+=a[i][k]*b[k][j];
                c[i][j]%=MOD;
            }
        }
}
int main () {
    fin>>nr;
    for(p=1;p<=nr;p++){
        fin>>c>>d>>e>>x>>y>>z>>n;
        if(n==0){
            fout<<x<<"\n";
            return 0;
        }
        if(n==1){
            fout<<y<<"\n";
            return 0;
        }
        if(n==2){
            fout<<z<<"\n";
            return 0;
        }
        long long a[3][3]={{c,d,e},{1,0,0},{0,1,0}};
        long long b[3][3];
        long long k[3][3]={{1,0,0},{0,1,0},{0,0,1}};
        n-=2;
        while(n){
            if(n&1){
                inmultire(k,a,b);
                copiere(k,b);
            }
            inmultire(a,a,b);
            copiere(a,b);
            n/=2;
        }
        fout<<(k[0][0]*z+k[0][1]*y+k[0][2]*x)%MOD<<"\n";
    }
    return 0;
}