Cod sursa(job #1064828)

Utilizator stefanzzzStefan Popa stefanzzz Data 22 decembrie 2013 13:47:26
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#define NRM 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");

int nrt,x,y,z,n;
long long aux[3][3],m[3][3],sol[3][3];
int i,j,k;

void plog(int p);

int main()
{
    f>>nrt;
    m[1][0]=m[2][1]=1;
    while(nrt--){
        f>>x>>y>>z>>m[2][2]>>m[1][2]>>m[0][2]>>n;
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                sol[i][j]=0;
        for(i=0;i<3;i++)
            sol[i][i]=1;
        plog(n);
        g<<(1LL*x*sol[0][0]+1LL*y*sol[1][0]+1LL*z*sol[2][0])%NRM<<'\n';}
    f.close();
    g.close();
    return 0;
}

void plog(int p){
    if(!p)
        return;
    plog(p/2);
    for(i=0;i<3;i++)
        for(j=0;j<3;j++){
            aux[i][j]=0;
            for(k=0;k<3;k++)
                aux[i][j]+=sol[i][k]*sol[k][j];
            aux[i][j]%=NRM;}
    if(p%2){
        for(i=0;i<3;i++)
            for(j=0;j<3;j++){
                sol[i][j]=0;
                for(k=0;k<3;k++)
                    sol[i][j]+=aux[i][k]*m[k][j];
                sol[i][j]%=NRM;}}
    else{
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                sol[i][j]=aux[i][j];}}