Cod sursa(job #2138695)

Utilizator dumitrescu_andreiDumitrescu Andrei dumitrescu_andrei Data 21 februarie 2018 20:29:24
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("iepuri.in");
ofstream g("iepuri.out");
int t,x,y,z,a,b,c,n,k;
const int MOD =666013;
int A[4][4],sol[4][4];

void multi(int A[][4],int b[][4])
{
    int c[4][4];
    for(int i=1;i<=3;++i)
    {
        for(int j=1;j<=3;++j)
        {
            c[i][j]=0;
            for(int k=1;k<=3;++k)
             c[i][j]+=(A[i][k]*b[k][j])%MOD;
        }
    }

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

int main()
{
    f>>t;
    for(int i=1;i<=t;++i)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        sol[1][1]=0;
        sol[1][2]=1;
        sol[1][3]=0;
        sol[2][1]=0;
        sol[2][2]=0;
        sol[2][3]=1;
        sol[3][1]=c;
        sol[3][2]=b;
        sol[3][3]=a;
        n-=2;
        memset(A,0,sizeof(A));
        A[1][1]=1;
        A[2][2]=1;
        A[3][3]=1;
        while(n)
        {
            if(n%2)
            {
                multi(A,sol);
                n--;
            }
            n/=2;
            multi(sol,sol);
        }
        g<<(A[3][1]*x%MOD +A[3][2]*y%MOD+A[3][3]*z%MOD)%MOD<<'\n';
    }
    return 0;
}