Cod sursa(job #1551355)

Utilizator ErikHEErik Henning ErikHE Data 15 decembrie 2015 19:23:48
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <iostream>
#include <fstream>
using namespace std;

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

long long A[11][11], B[6][6], s[6][6];

int main()
{

    int i, j, contor, k, a, b, c, x, y, z, n, t;
    long long exp, baza;
    f>>t;
    for (contor=1;contor<=t;contor++)  {
        f>>x>>y>>z>>a>>b>>c>>n;
        A[1][1] = 0;A[1][2]=1;A[1][3]=0;//  0   1   0
        A[2][1] = 0;A[2][2]=0;A[2][3]=1;//  0   0   1
        A[3][1] = a;A[3][2]=b;A[3][3]=c;//  A   B   C
        exp = n-3;
        B[1][1]=x;B[2][1]=y;B[3][1]=z;
        /*  x(T1)
            y(T2)
            z(T3) */
  /*          cout<<"Inainte de inmultire (MATRICEA A): \n";
        for (i=1;i<=3;i++)  {
            for (j=1;j<=3;j++)
                cout<<A[i][j]<<"\t";
            cout<<endl;
        }
        cout<<"Inainte de inmultire (matricea B): \n";
        for (i=1;i<=3;i++)  {
           for (j=1;j<=1;j++)
                cout<<B[i][j]<<"\t";
            cout<<endl;*/
        }
        while (exp!=0)  {

            if (exp % 2 == 0)   {
                for (i=1;i<=3;i++)
                    for (j=1;j<=3;j++)  {s[i][j] = 0;
                        for (k=1;k<=3;k++)
                            s[i][j] += A[i][k] * A[k][j];
                    // A[i][j]=s[i][j];
                    }
                     for (i=1;i<=3;i++)
                    for (j=1;j<=3;j++) A[i][j]=s[i][j];
                exp/=2;
            }
            else    {
                B[1][1] = s[1][1]*B[1][1] + s[1][2]*B[2][1] + s[1][3]*B[3][1];
                B[2][1] = s[2][1]*B[1][1] + s[2][2]*B[2][1] + s[2][3]*B[3][1];
                B[3][1] = s[3][1]*B[1][1] + s[3][2]*B[2][1] + s[3][3]*B[3][1];
                exp--;
            }
        }
    g<<B[3][1] - 3<<endl;
  /*  cout<<"Dupa inmultire (matricea A): \n";
        for (i=1;i<=3;i++)  {
           for (j=1;j<=3;j++)
                cout<<A[i][j]<<"\t";
            cout<<endl;
        }
 cout<<"Dupa inmultire (matricea B): \n";
        for (i=1;i<=3;i++)  {
           for (j=1;j<=1;j++)
                cout<<B[i][j]<<"\t";
            cout<<endl;
        }*
    }*/
    return 0;
}