Cod sursa(job #1533121)

Utilizator matei1404014Iorgulescu Matei matei1404014 Data 22 noiembrie 2015 08:30:46
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cstring>
using namespace std;
int mod=666013;
int f(int a[][4],int b[][4],int c2[][4])
{
    int i,j,k;
    memset(c2,0,16*sizeof(int));
    for(i=1; i<=3; i++)
        for(j=1; j<=3; j++)
        {
            for(k=1; k<=3; k++)
                c2[i][j]=(c2[i][j]+1LL*a[i][k]*b[k][j]%mod)%mod;
        }
}


int main()
{
    freopen ("iepuri.in","r",stdin);
    freopen ("iepuri.out","w",stdout);
    int a,b,c1,x,y,z,t;
    int n,aux[4][4],zx,prod[4][4],r[4][4],i,v[33],c=0,j,k,p[4][4];
    scanf("%d",&t);
    for(zx=1; zx<=t; zx++)
    {
        c=0;
        scanf("%d %d %d %d %d %d %d",&x,&y,&z,&a,&b,&c1,&n);
        n-=2;
        while(n)
        {
            v[c++]=n%2;
            n/=2;
        }
        for(i=1; i<=3; i++)
            for(j=1; j<=3; j++)
                if(i==j)
                    p[i][j]=1;
                else
                    p[i][j]=0;
        prod[1][1]=x;
        prod[1][2]=y;
        prod[1][3]=z;
        r[1][1]=0;
        r[1][2]=0;
        r[1][3]=c1;
        r[2][1]=1;
        r[2][2]=0;
        r[2][3]=b;
        r[3][1]=0;
        r[3][2]=1;
        r[3][3]=a;
        for(i=0; i<c; i++)
        {
            if(v[i])
                f(p,r,aux);
            if(v[i])
            {
                for(j=1; j<=1; j++)
                    for(k=1; k<=3; k++)
                        p[j][k]=aux[j][k];
            }
            f(r,r,aux);
            for(j=1; j<=1; j++)
                for(k=1; k<=3; k++)
                    r[j][k]=aux[j][k];
        }
        prod[1][3]=(1LL*x*p[1][3]+1LL*y*p[2][3]+1LL*z*p[3][3])%mod;
        printf("%d",prod[1][3]);
        printf("\n");
    }
    return 0;
}