Cod sursa(job #1721822)

Utilizator denniscrevusDennis Curti denniscrevus Data 26 iunie 2016 16:33:53
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <fstream>
#define MOD 666013

using namespace std;

long long ceva[4][4],n,rez[4][4],ans;
int t,x1,x,y,z,a,b,c,i,j;

void inmultire(long long a[4][4],long long b[4][4])
{
    rez[1][1]=(((a[1][1]%MOD*b[1][1]%MOD)%MOD+(a[1][2]%MOD*b[2][1]%MOD)%MOD)%MOD+(a[1][3]%MOD*b[3][1]%MOD)%MOD)%MOD;
    rez[1][2]=(((a[1][1]%MOD*b[1][2]%MOD)%MOD+(a[1][2]%MOD*b[2][2]%MOD)%MOD)%MOD+(a[1][3]%MOD*b[3][2]%MOD)%MOD)%MOD;
    rez[1][3]=(((a[1][1]%MOD*b[1][3]%MOD)%MOD+(a[1][2]%MOD*b[2][3]%MOD)%MOD)%MOD+(a[1][3]%MOD*b[3][3]%MOD)%MOD)%MOD;

    rez[2][1]=(((a[2][1]%MOD*b[1][1]%MOD)%MOD+(a[2][2]%MOD*b[2][1]%MOD)%MOD)%MOD+(a[2][3]%MOD*b[3][1]%MOD)%MOD)%MOD;
    rez[2][2]=(((a[2][1]%MOD*b[1][2]%MOD)%MOD+(a[2][2]%MOD*b[2][2]%MOD)%MOD)%MOD+(a[2][3]%MOD*b[3][2]%MOD)%MOD)%MOD;
    rez[2][3]=(((a[2][1]%MOD*b[1][3]%MOD)%MOD+(a[2][2]%MOD*b[2][3]%MOD)%MOD)%MOD+(a[2][3]%MOD*b[3][3]%MOD)%MOD)%MOD;

    rez[3][1]=(((a[3][1]%MOD*b[1][1]%MOD)%MOD+(a[3][2]%MOD*b[2][1]%MOD)%MOD)%MOD+(a[3][3]%MOD*b[3][1]%MOD)%MOD)%MOD;
    rez[3][2]=(((a[3][1]%MOD*b[1][2]%MOD)%MOD+(a[3][2]%MOD*b[2][2]%MOD)%MOD)%MOD+(a[3][3]%MOD*b[3][2]%MOD)%MOD)%MOD;
    rez[3][3]=(((a[3][1]%MOD*b[1][3]%MOD)%MOD+(a[3][2]%MOD*b[2][3]%MOD)%MOD)%MOD+(a[3][3]%MOD*b[3][3]%MOD)%MOD)%MOD;
}

void putere(long long baza[4][4],int exp)
{
    long long int sol[4][4];

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            sol[i][j]=0;

    for(i=1;i<=3;i++)
        sol[i][i]=1;

    for(;exp;exp>>=1)
    {
        if((exp&1)==1)
        {
            inmultire(sol,baza);

            for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    sol[i][j]=rez[i][j];
        }

        inmultire(baza,baza);

        for(i=1;i<=3;i++)
            for(j=1;j<=3;j++)
                baza[i][j]=rez[i][j];
    }

    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            ceva[i][j]=sol[i][j];
}

int main()
{
    ifstream f("iepuri.in");
    ofstream g("iepuri.out");

    f>>t;

    for(x1=1;x1<=t;x1++)
    {
       f>>x>>y>>z>>a>>b>>c>>n;

    ceva[1][1]=0;
    ceva[2][1]=1;
    ceva[3][1]=0;
    ceva[1][2]=0;
    ceva[2][2]=0;
    ceva[3][2]=1;
    ceva[1][3]=c;
    ceva[2][3]=b;
    ceva[3][3]=a;

    putere(ceva,n);

    ans=x*ceva[1][1]+y*ceva[2][1]+z*ceva[3][1];

    g<<ans<<"\n";
    }
}