Cod sursa(job #3366845)

Utilizator lambrulescu@outlook.comMatei Lambrulescu [email protected] Data 4 octombrie 2026 19:39:26
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int MOD=666013;

int r[5][5],a[5][5],fibo2[5][5],rez[5][5];
int aux[5][5];

void inmultirea_matricelor(int x[5][5], int y[5][5], int z[5][5], int n, int m, int p)
{
    int i,j,k;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            aux[i][j]=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            long long s=0;
            for(k=1;k<=p;k++)
            {
                s+=(1LL*x[i][k]*y[k][j])%MOD;
            }
            aux[i][j]=s%MOD;
        }
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            z[i][j]=aux[i][j];
}

void exp_rapida(long long n)
{
    int i,j;
    n=n-2;
    for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
            if(i==j)
                r[i][j]=1;
            else
                r[i][j]=0;
    while(n>0)
    {
        if(n%2==1)
            inmultirea_matricelor(r,a,r,3,3,3);
        inmultirea_matricelor(a,a,a,3,3,3);
        n=n/2;
    }
}

int main()
{
    int t,i;
    cin>>t;
    for(i=1;i<=t;i++)
    {
        long long X,Y,Z,A,B,C,n;
        cin>>X>>Y>>Z>>A>>B>>C>>n;
        if(n==1)
        {
            cout<<X;
        }
        else if(n==2)
        {
            cout<<Y;
        }
        else if(n==3)
        {
            cout<<Z;
        }
        else
        {
            a[1][1]=0; a[1][2]=1; a[1][3]=0;
            a[2][1]=0; a[2][2]=0; a[2][3]=1;
            a[3][1]=C; a[3][2]=B; a[3][3]=A;
            exp_rapida(n);  ///pt matricea r;
            fibo2[1][1]=X; fibo2[2][1]=Y; fibo2[3][1]=Z;
            inmultirea_matricelor(r,fibo2,rez,3,1,3);
            cout<<rez[3][1]<<"\n";
        }
    }
    return 0;
}