Cod sursa(job #1044669)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 30 noiembrie 2013 11:06:17
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 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], d[4][4];

void init0(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];
}

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