Cod sursa(job #1735455)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 29 iulie 2016 22:45:45
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 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;
long long a[3][3],b[3][3],k[3][3];
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>>x>>y>>z>>c>>d>>e>>n;
        a[0][0]=c; a[0][1]=d; a[0][2]=e;
        a[1][0]=1; a[1][1]=0; a[1][2]=0;
        a[2][0]=0; a[2][1]=1; a[2][2]=0;
        k[0][0]=1; k[0][1]=0; k[0][2]=0;
        k[1][0]=0; k[1][1]=1; k[1][2]=0;
        k[2][0]=0; k[2][1]=0; k[2][2]=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;
}