Cod sursa(job #2924388)

Utilizator Andrei_Gagea08Andrei Gagea Andrei_Gagea08 Data 1 octombrie 2022 16:02:06
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <fstream>

using namespace std;

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

int v[5][5],rez[5][5];
int sol[5][5];

int main()
{
    int n,i,j,k;
    int x,y,z,a,b,c;
    int cer;
    cin>>cer;
    for(int qq=1;qq<=cer;qq++)
    {
        cin>>x>>y>>z>>a>>b>>c;
        cin>>n;
        n-=2;

        //sol = 1
        for(i=1;i<=4;i++)
            for(j=1;j<=4;j++)
                if(i==j)
                    sol[i][j]=1;
                else
                    sol[i][j]=0;


        //v
        for(i=1;i<=4;i++)
            for(j=1;j<=4;j++)
                v[i][j]=0;
        v[1][2]=1;
        v[2][3]=1;
        v[3][4]=1;
        v[4][2]=c;
        v[4][3]=b;
        v[4][4]=a;


        while(n>0)
        {

            //v*v
            if(n%2==0)
            {
                n/=2;
                for(i=1;i<=4;i++)
                    for(j=1;j<=4;j++)
                        rez[i][j]=0;
                for(i=1;i<=4;i++)
                    for(j=1;j<=4;j++)
                        for(k=1;k<=4;k++)
                        {
                            rez[i][j]+=v[i][k]*v[k][j];
                        }
                for(i=1;i<=4;i++)
                    for(j=1;j<=4;j++)
                        v[i][j]=rez[i][j];
            }

            //sol*v
            else
            {
                n--;
                for(i=1;i<=4;i++)
                    for(j=1;j<=4;j++)
                        rez[i][j]=0;
                for(i=1;i<=4;i++)
                    for(j=1;j<=4;j++)
                        for(k=1;k<=4;k++)
                        {
                            rez[i][j]+=sol[i][k]*v[k][j];
                        }
                for(i=1;i<=4;i++)
                    for(j=1;j<=4;j++)
                        sol[i][j]=rez[i][j];
            }
        }
        cout<<sol[4][2]*x+sol[4][3]*y+sol[4][4]*z;
        cout<<endl;
    }
    return 0;
}