Cod sursa(job #2774677)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 12 septembrie 2021 12:04:44
Problema Iepuri Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#define R 666013
#define ll long long
int t,x,y,z,a,b,c,n,i,j;
ll m[4][4],r[4][4];
void I(ll a[][4],ll b[][4])
{
    ll c[4][4];
    int i,j;
    for(i=0;i<3;++i)
        for(j=0;j<3;++j)
            c[i][j]=(a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j])%R;
    for(i=0;i<3;++i)
        for(j=0;j<3;++j)
            a[i][j]=c[i][j];
}
void P(ll m[][4],ll z[][4],int n)
{
    for(;n;n>>=1,I(m,m))
        if(n&1)
            I(z,m);
}
int main()
{
    freopen("iepuri.in","r",stdin),freopen("iepuri.out","w",stdout),scanf("%d",&t);
    while(t--) {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
        for(i=0;i<3;++i)
            for(j=0;j<3;++j)
                r[i][j]=(i==j?1:0);
        m[0][0]=0,m[0][1]=1,m[0][2]=0,m[1][0]=m[1][1]=0,m[1][2]=1,m[2][0]=c,m[2][1]=b,m[2][2]=a,P(m,r,n-2),
        printf("%lld\n",(r[2][0]*x+r[2][1]*y+r[2][2]*z)%R);
    }
    return 0;
}