Cod sursa(job #1510139)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 24 octombrie 2015 16:41:37
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>

using namespace std;

int mod=666013,a[3][3],v[3][3],n;

void inm_matrici(int a[3][3],int b[3][3],int rez[3][3])
{
    int aux[3][3];
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
        {
            aux[i][j]=0;
            for(int k=0;k<3;k++)
                aux[i][j]=(aux[i][j]+1LL*a[i][k]*b[k][j])%mod;
        }
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++) rez[i][j]=aux[i][j];
}

void rid_put(int a[3][3],int n,int rez[3][3])
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++) rez[i][j]=i==j;
    for(long long i=1;i<=n;i<<=1)
    {
        if(n&i) inm_matrici(rez,a,rez);
        inm_matrici(a,a,a);
    }
}
int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    int t,r,x,y,z,A,B,C;
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&A,&B,&C,&n);
        a[0][0]=a[0][1]=a[1][1]=a[2][0]=0;
        a[1][0]=a[2][1]=1;
        a[0][2]=C;a[1][2]=B;a[2][2]=A;
        rid_put(a,n,v);
        r=(1LL*v[0][0]*x+1LL*v[1][0]*y+1LL*v[2][0]*z)%mod;
        printf("%d\n",r);
    }
    return 0;
}