Cod sursa(job #1790542)

Utilizator KOzarmOvidiu Badea KOzarm Data 28 octombrie 2016 13:13:03
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <fstream>

using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");


long long cons[4][4],a[4][4],b[4][4];


void putere(int k)
{
    if(k>1)
    {
        if(k%2==0)
        {
            putere(k/2);
            int coordy=1;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    for(int q=1;q<=3;q++)
                    {
                        b[i][coordy]+=a[i][q]*a[q][j];
                        b[i][coordy]%=666013;
                    }
                    coordy=coordy%3+1;
                }
            }
            for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
            {
                a[i][j]=b[i][j];
                b[i][j]=0;
            }
        }
        else
        {
            putere(k-1);
            int coordy=1;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                for(int q=1;q<=3;q++)
                {
                    b[i][coordy]+=a[i][q]*cons[q][j];
                    b[i][coordy]%=666013;
                    coordy=coordy%3+1;
                }
            }
            for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
            {
                a[i][j]=b[i][j];
                b[i][j]=0;
            }
        }
    }
    else
    {
        for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            a[i][j]=cons[i][j];
    }
}


int main()
{
    int k;
    fin>>k;
    for(int i=1;i<=k;i++)
    {
        int x,y,z,a1,b,c,n;
        fin>>x>>y>>z>>a1>>b>>c>>n;
        cons[1][1]=a1;
        cons[1][2]=1;
        cons[1][3]=0;
        cons[2][1]=b;
        cons[2][2]=0;
        cons[2][3]=1;
        cons[3][1]=c;
        cons[3][2]=0;
        cons[3][3]=0;
        putere(n-2);
        fout<<(x*a[1][1]+y*a[2][1]+z*a[3][1])%666013<<"\n";
    }
    return 0;
}