Cod sursa(job #2265287)

Utilizator XDDDDariusPetean Darius XDDDDarius Data 20 octombrie 2018 21:50:58
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#define MOD 666013
#include <string.h>
std::ifstream in("iepuri.in");
std::ofstream out("iepuri.out");

using namespace std;

struct mat
{
    long long a[5][5];
};
mat inm(mat A, mat b)
{
    mat c;
    memset(c.a,0,sizeof(c.a));
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            for(int k=0; k<3; k++)
            {
                c.a[i][j]=(c.a[i][j]+(A.a[i][k]*b.a[k][j]))%MOD;
            }
        }
    }
    return c;
}
mat lgput(mat a,int p)
{
    mat r;
    memset(r.a,0,sizeof(r.a));
    for(int i=0;i<3;i++)
    {
        r.a[i][i]=1;
    }
    for(unsigned int i=1;i<(1<<31);i=i<<1)
    {
        if(p&1)
        {
            r=inm(r,a);
        }
        a=inm(a,a);
    }
    return r;
}

int x,y,z,a,b,c,n;
mat prim,sec,C;
int main()///g1=( f[x]f[y]f[z])
{
    short nn;
    in>>nn;
    for(int i=0; i<nn; i++)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        memset(C.a,0,sizeof(C.a));
        prim.a[0][1]=1;
        prim.a[1][2]=1;
        prim.a[2][0]=c;
        prim.a[2][1]=b;
        prim.a[2][2]=a;
        sec.a[0][0]=x;
        sec.a[1][0]=y;
        sec.a[2][0]=z;
        C=lgput(prim,n-2);
        C=inm(C,sec);
        out<<C.a[2][0]<<"\n";
    }

    return 0;
}