Cod sursa(job #2144599)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 26 februarie 2018 20:26:48
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int t,x,y,z,a,b,c,n;
const int modulo=666013;

long long sol[5][5];

void inmultire(long long a[5][5],long long b[5][5])
{
    long long aux[4][4];
    int i,j,q;
    for(i=1; i<=3; i++)
    {
        for(j=1; j<=3; j++)
        {
            aux[i][j]=0;
            for(q=1; q<=3; q++)
            {
                aux[i][j]=(aux[i][j]+a[i][q]*b[q][j]%modulo)%modulo;
            }

        }
    }
    for(i=1; i<=3; i++)
        for(j=1; j<=3; j++)
            a[i][j]=aux[i][j];

}

int main()
{
    long long z1,z2,z3,ct,rez;
    int i,j;
    in>>t;
    for(int q=1; q<=t; q++)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        long long mat[5][5];
        for(i=1; i<=4; i++)
            for(j=1; j<=4; j++)
                mat[i][j]=0;
        mat[1][1]=a;
        mat[2][1]=b;
        mat[3][1]=c;
        mat[1][2]=1;
        mat[2][3]=1;
        for(int i=1; i<=3; i++)
            for(int j=1; j<=3; j++)
                if(i==j)
                    sol[i][j]=1;
                else
                    sol[i][j]=0;
        //out<<q<<endl;
        n=n-2;
        while(n!=0)
        {
            if(n%2==1)
            {
                inmultire(sol,mat);
            }
            n=n/2;
            inmultire(mat,mat);
        }
        /*for(i=1; i<=3; i++)
        {
            for(j=1; j<=3; j++)
                out<<sol[i][j]<<" ";
            out<<endl;
        }
        */
        out<<(z*sol[1][1]%modulo+y*sol[2][1]%modulo+x*sol[3][1]%modulo)%modulo<<'\n';
    }
    return 0;
}