Cod sursa(job #1044749)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 30 noiembrie 2013 12:08:01
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#define p 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int t, n, A, B, C, x, y, z, i, j, k;
int a[4][4], b[4][4], c[4][4];

void init(int m[4][4]){
    for(int i=1; i<4; i++)
        for(int j=1; j<4; j++)
            m[i][j]=0;
}

void copy(int v1[4][4], int v2[4][4]){
    for(int i=1; i<4; i++)
        for(int j=1; j<4; j++)
            v1[i][j]=v2[i][j];
}

void multiply(int x[4][4], int y[4][4], int z[4][4]){
    for(int i=1; i<4; i++)
        for(int j=1; j<4; j++)
        {
            z[i][j]=0;
            for(int k=1; k<4; k++)
                z[i][j]=(z[i][j]+x[i][k]*y[k][j])%p;
        }
    copy(x, z);
}

int main(){
    f>>t;
    for(;t;t--)
    {
        f>>A>>B>>C>>x>>y>>z>>n;
        init(a);
        a[1][2]=1, a[2][3]=1, a[3][1]=z, a[3][2]=y, a[3][3]=x;
        init(b);
        b[1][1]=1, b[2][2]=1, b[3][3]=1;
        n-=2;
        while(n!=0)
        {
            if(n%2)
                multiply(b, a, c);
            multiply(a, a, c);
            n=n/2;
        }
        g<<(b[3][1]*A+b[3][2]*B+b[3][3]*C)%p<<"\n";
    }
    return 0;
}