Cod sursa(job #2005460)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 27 iulie 2017 10:06:27
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#define MOD 666013

using namespace std;
int m[3][3]={
 {0,0,0},{1,0,0},{0,1,0}
};
int en[3][3]={
 {1,0,0},{0,1,0},{0,0,1}
};
int c[3][3],p[3][3],a[3][3];
void cop (int a[3][3],int b[3][3]){
    for (int i=0;i<3;i++)
        for (int j=0;j<3;j++)
            a[i][j]=b[i][j];
}
void inmult (int a[3][3],int b[3][3]){
    for (int i=0;i<3;i++){
        for (int j=0;j<3;j++){
            c[i][j]=0;
            for (int ii=0;ii<3;ii++)
                c[i][j]=(c[i][j] + ((long long)a[i][ii]*b[ii][j])%MOD)%MOD;
        }
    }
}
int main()
{
    FILE *fin=fopen ("iepuri.in","r");
    FILE *fout=fopen ("iepuri.out","w");
    int t,n,aa,b,cc,sol,x,y,z;
    fscanf (fin,"%d",&t);
    for (;t;t--){
        fscanf (fin,"%d%d%d%d%d%d%d",&x,&y,&z,&aa,&b,&cc,&n);
        m[0][0]=aa;
        m[0][1]=b;
        m[0][2]=cc;
        cop (a,m);
        cop (p,en);
        n-=2;
        while (n){
            if (n%2){
                inmult (a,p);
                cop (p,c);
            }
            inmult (a,a);
            cop (a,c);
            n/=2;
        }
        sol=(((long long)p[0][0]*z)%MOD+((long long)p[0][1]*y)%MOD+((long long)p[0][2]*x)%MOD)%MOD;
        fprintf (fout,"%d\n",sol);
    }
    return 0;
}