Cod sursa(job #2053531)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 31 octombrie 2017 20:39:06
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>
#define PRIM 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long t,x,y,z,a,b,c,v[3][3],prod[3][3],n;
void inmulteste(long long mat1[3][3],long long mat2[3][3])
{
    long long res[3][3];
    res[0][0]=mat1[0][0]*mat2[0][0]+mat1[0][1]*mat2[1][0]+mat1[0][2]*mat2[2][0];res[0][0]%=PRIM;
    res[0][1]=mat1[0][0]*mat2[0][1]+mat1[0][1]*mat2[1][1]+mat1[0][2]*mat2[2][1];res[0][1]%=PRIM;
    res[0][2]=mat1[0][0]*mat2[0][2]+mat1[0][1]*mat2[1][2]+mat1[0][2]*mat2[2][2];res[0][2]%=PRIM;
    res[1][0]=mat1[1][0]*mat2[0][0]+mat1[1][1]*mat2[1][0]+mat1[1][2]*mat2[2][0];res[1][0]%=PRIM;
    res[1][1]=mat1[1][0]*mat2[0][1]+mat1[1][1]*mat2[1][1]+mat1[1][2]*mat2[2][1];res[1][1]%=PRIM;
    res[1][2]=mat1[1][0]*mat2[0][2]+mat1[1][1]*mat2[1][2]+mat1[1][2]*mat2[2][2];res[1][2]%=PRIM;
    res[2][0]=mat1[2][0]*mat2[0][0]+mat1[2][1]*mat2[1][0]+mat1[2][2]*mat2[2][0];res[2][0]%=PRIM;
    res[2][1]=mat1[2][0]*mat2[0][1]+mat1[2][1]*mat2[1][1]+mat1[2][2]*mat2[2][1];res[2][1]%=PRIM;
    res[2][2]=mat1[2][0]*mat2[0][2]+mat1[2][1]*mat2[1][2]+mat1[2][2]*mat2[2][2];res[2][2]%=PRIM;
    for(int i=0;i<3;++i)
        for(int j=0;j<3;++j)
            mat1[i][j]=res[i][j];
}
int main()
{
    f>>t;
    for(int i=1;i<=t;++i)
        {
            f>>x>>y>>z>>a>>b>>c>>n;
            v[0][0]=v[0][2]=v[1][0]=v[1][1]=0;
            v[0][1]=v[1][2]=1;
            v[2][0]=c;v[2][1]=b;v[2][2]=a;
            prod[0][0]=prod[1][1]=prod[2][2]=1;
            prod[0][1]=prod[0][2]=prod[1][0]=prod[1][2]=prod[2][0]=prod[2][1]=0;
            n-=2;
            for(int i=1;i<=n;i<<=1)
                {
                    if(i&n) inmulteste(prod,v);
                    inmulteste(v,v);
                }
            g<<prod[2][0]*x+prod[2][1]*y+prod[2][2]*z<<'\n';
        }

    return 0;
}