Cod sursa(job #2036026)

Utilizator andreiudilaUdila Andrei andreiudila Data 10 octombrie 2017 10:12:27
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("iepuri.in");
ofstream cout("iepuri.out");

long long A[6][6], B[6][6];
long long x,n,i,j,mod=666013,k,t,y,z,a,b,c ;

void matr (long long a[][6], long long b[][6])
{
    int i,j,k;
    int rez[5][5];
    for(i=1; i<=3; i++)
        for(j=1; j<=3; j++)
            rez[i][j]=0;



    for(i=1; i<=3; i++)
        for(j=1; j<=3; j++)
            for(k=1; k<=3; k++)
                rez[i][j]=((rez[i][j])%mod+(a[i][k]*b[k][j])%mod)%mod;

    for(int i=1;i<=4;++i)
        for(j=1;j<=4;++j)
            a[i][j]=rez[i][j];
}


int main()
{
    cin>>t;
    while(t--)
    {
        cin>>x>>y>>z>>a>>b>>c>>n;

        memset(A,0,sizeof(A));
        A[2][1]=A[3][2]=1;
        A[3][3]=a;
        A[2][3]=b;
        A[1][3]=c;

        for(int i=1;i<=3;++i)
            for(int j=1;j<=3;++j)
                B[i][j]=A[i][j];




        //cout<<(A[1][2]+A[2][2])%mod<<"\n";


    for(int i=n-1;i>0;)
    {
        if(i%2==1) matr(A,B), --i;
        else matr(B,B), i/=2;
    }


     cout<<(x*A[1][1]+y*A[2][1]+z*A[3][1])%mod<<'\n';

    }



    return 0;
}