Cod sursa(job #2320961)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 15 ianuarie 2019 14:43:43
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <bits/stdc++.h>

using namespace std;

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

const long long mod=666013;

int t,x,y,z,a,b,c,n,i,j,k;
long long newmtr[10][10],rez[10][10],matr[10][10];

int main()
{
    f>>t;
    for(;t;t--)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        memset(rez,0,sizeof(rez));
        memset(matr,0,sizeof(matr));
        matr[2][1]=1;rez[1][1]=1;
        matr[3][2]=1;rez[2][2]=1;
        matr[1][3]=c;rez[3][3]=1;
        matr[2][3]=b;
        matr[3][3]=a;
        n-=2;
        while(n)
        {
            memset(newmtr,0,sizeof(newmtr));
            if(n&1)
            {
                for(i=1;i<=3;i++)
                    for(j=1;j<=3;j++)
                        for(k=1;k<=3;k++)
                            newmtr[i][j]=(newmtr[i][j]+rez[i][k]*matr[k][j])%mod;
                for(i=1;i<=3;i++)
                    for(j=1;j<=3;j++)
                        rez[i][j]=newmtr[i][j];
                memset(newmtr,0,sizeof(newmtr));
            }
            n>>=1;
            for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    for(k=1;k<=3;k++)
                        newmtr[i][j]=(newmtr[i][j]+matr[i][k]*matr[k][j])%mod;
            for(i=1;i<=3;i++)
                for(j=1;j<=3;j++)
                    matr[i][j]=newmtr[i][j];
        }
//        for(i=1;i<=3;i++)
//        {
//            for(j=1;j<=3;j++)
//                g<<rez[i][j]<<' ';
//            g<<'\n';
//        }
        g<<(x*rez[1][3]+y*rez[2][3]+z*rez[3][3])%mod<<'\n';
    }
    return 0;
}