Cod sursa(job #1853298)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 21 ianuarie 2017 16:28:55
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<bits/stdc++.h>
#define MOD 666013
using namespace std;
int t,n,a,b,c,x,y,z;
int sol;
long long r[3][3],aux[3][3];
long long id[3][3]=
{
    {1LL,0,0},
    {0,1LL,0},
    {0,0,1LL}
};
void inmultire(long long a[3][3],long long b[3][3],long long c[3][3])
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            c[i][j]=0;
            for(int k=0;k<3;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
                c[i][j]%=MOD;
            }
        }
    }
}
int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    scanf("%d",&t);
    for(int test=1;test<=t;test++)
    {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
        long long m[3][3]=
        {
          {1LL*a,1LL*b,1LL*c},
          {1,0,0},
          {0,1,0}
        };
        n-=2;
        memcpy(r,id,sizeof(id));
        while(n)
        {
            if(n%2)
            {
                inmultire(r,m,aux);
                memcpy(r,aux,sizeof(aux));
            }
            inmultire(m,m,aux);
            memcpy(m,aux,sizeof(aux));
            n>>=1;
        }
        long long sol=z*r[0][0]+y*r[0][1]+x*r[0][2];
        sol%=MOD;
        printf("%lld\n",sol);
    }
    return 0;
}