Cod sursa(job #1139157)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 10 martie 2014 21:39:46
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>

using namespace std;

long long A[5][5],B[5][5],C[5][5],sol;

int a,b,c,x,y,z,n,t,i,j,k;

void prod ( long long A[5][5], long long B[5][5], long long C[5][5] ) {
    int i,j,k;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            C[i][j]=0;

    for(i=1;i<=3;i++) {
        for(j=1;j<=3;j++)
            for(k=1;k<=3;k++) {
                C[i][j]+=((A[i][k])*(B[k][j]))%666013;
                C[i][j]%=666013;
            }
    }
}

void atrib(long long A[5][5], long long B[5][5]){
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            B[i][j]=A[i][j];
}

int main () {
    ifstream f("iepuri.in");
    ofstream g("iepuri.out");
    f>>t;
    while(t--) {
        f>>x>>y>>z;
        f>>a>>b>>c>>n;
        n--;n--;
        for(i=1;i<=3;i++){
            for(j=1;j<=3;j++)
                A[i][j]=0;
            A[i][i]=1;
        }
        B[1][1]=a;
        B[1][2]=b;
        B[1][3]=c;
        B[2][1]=B[3][2]=1;
        B[2][2]=B[2][3]=B[3][1]=B[3][3]=0;
        while(n>0) {
            if ((n&1)==1) {
                prod(A,B,C);
                atrib(C,A);
            }
            prod(B,B,C);
            atrib(C,B);
            n>>=1;
        }
        sol=((A[1][1]*z)%666013 +(A[1][2]*y)%666013 + (A[1][3]*x)%666013)%666013;
        g<<sol<<"\n";
    }
    return 0;
}