Cod sursa(job #2027846)

Utilizator RG1999one shot RG1999 Data 26 septembrie 2017 19:26:14
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;
int i,j,k,x,y,z,q,t,l,m,o,w,r,p;
long long a[4][4],n[4][4];
void multiply(long long  a[4][4],long long  b[4][4])
{
    int c[3][3];
     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(q=1;q<=3;q++)
        c[i][j]+=(a[i][q]*b[q][j])%666013;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        a[i][j]=c[i][j]%666013;
}
void pow(long long  a[4][4],int  k,long long  n[4][4])
{
    while(k)
    {
        if(k%2)
        {
            multiply(n,a);
            k--;
        }
        multiply(a,a);
        k/=2;
    }
}
int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%d",&t);
    for(l=1;l<=t;l++)
    {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&m,&w,&r,&k);
        for(o=1;o<=3;o++)
            for(p=1;p<=3;p++)
            if(o==p) n[o][p]=1;
        else
            n[o][p]=0;
        a[1][1]=0;
        a[2][1]=1;
        a[3][1]=0;
        a[1][2]=0;
        a[2][2]=0;
        a[3][2]=1;
        a[1][3]=r;
        a[2][3]=w;
        a[3][3]=m;
        pow(a,k,n);
        printf("%lld\n",(n[1][1]*x+n[2][1]*y+n[3][1]*z)%666013);

    }
    return 0;
}