Cod sursa(job #1832045)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 19 decembrie 2016 12:29:09
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>
#define mod 666013
#define lim 3
int baza[lim][lim],rez[lim][lim],cop[lim][lim];
void produs(int a[lim][lim],int b[lim][lim],int c[lim][lim]){
    int i,j,k;
    for(i=0;i<lim;i++)
        for(j=0;j<lim;j++) {
            c[i][j]=0;
            for(k=0;k<lim;k++)
                c[i][j]=(c[i][j]+1LL*a[i][k]*b[k][j])%mod;
        }
}
void copiere(int a[lim][lim],int b[lim][lim]){
    int i,j;
    for(i=0;i<lim;i++)
        for(j=0;j<lim;j++)
            b[i][j]=a[i][j];
}
void putlog(int exp){
    while(exp!=0){
        if(exp%2==1){
            produs(rez,baza,cop);
            copiere(cop,rez);
        }
        produs(baza,baza,cop);
        copiere(cop,baza);
        exp/=2;
    }
}
int main(){
    FILE *fin,*fout;
    fin=fopen("iepuri.in","r");
    fout=fopen("iepuri.out","w");
    int i,n,t,a,b,c,x,y,z;
    fscanf(fin,"%d",&t);
    for(i=1;i<=t;i++){
        fscanf(fin,"%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
        baza[0][0]=0; baza[0][1]=0; baza[0][2]=c;
        baza[1][0]=1; baza[1][1]=0; baza[1][2]=b;
        baza[2][0]=0; baza[2][1]=1; baza[2][2]=a;
        rez[0][0]=x; rez[0][1]=y; rez[0][2]=z;
        rez[1][0]=0; rez[1][1]=0; rez[1][2]=0;
        rez[2][0]=0; rez[2][1]=0; rez[2][2]=0;
        putlog(n-2);
        fprintf(fout,"%d\n",rez[0][2]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}