Cod sursa(job #3352125)

Utilizator Alexutu010Draghici Alex Alexutu010 Data 24 aprilie 2026 08:11:09
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 666013;

long long fib[4][2], rezm[4][4];
long long baza[4][4];

void er(long long exp)
{
    long long aux[4][4], rez;
    int i, j, k;
    while(exp)
    {
        if(exp%2==0)
        {
            exp/=2;
            for(i=1; i<=3; i++)
            {
                for(j=1; j<=3; j++)
                {
                    rez=0;
                    for(k=1; k<=3; k++)
                    {
                        rez+=baza[i][k]*baza[k][j]%MOD;
                        rez=rez%MOD;
                    }
                    aux[i][j]=rez;
                }
            }
            for(i=1; i<=3; i++)
            {
                for(j=1; j<=3; j++)
                {
                    baza[i][j]=aux[i][j];
                }
            }
        }
        else
        {
            exp--;
            for(i=1; i<=3; i++)
            {
                for(j=1; j<=3; j++)
                {
                    rez=0;
                    for(k=1; k<=3; k++)
                    {
                        rez+=rezm[i][k]*baza[k][j]%MOD;
                        rez=rez%MOD;
                    }
                    aux[i][j]=rez;
                }
            }
            for(i=1; i<=3; i++)
            {
                for(j=1; j<=3; j++)
                {
                    rezm[i][j]=aux[i][j];
                }
            }
        }
    }
}

int main()
{
    long long i, j, k, w, rez;
    long long t, x, y, z, n;
    fin >> t;
    for(w=1; w<=t; w++)
    {
        for(i=1; i<=3; i++)
        {
            for(j=1; j<=3; j++)
            {
                baza[i][j]=0;
                rezm[i][j]=0;
            }
        }
        fin >> fib[1][1] >> fib[2][1] >> fib[3][1] >> baza[3][3] >> baza[3][2] >> baza[3][1] >> n;
        baza[1][2]=baza[2][3]=1;
        rezm[1][1]=rezm[2][2]=rezm[3][3]=1;
        er(n-2);
        rez=0;
        fout << (fib[1][1]*rezm[3][1]%MOD + fib[2][1]*rezm[3][2]%MOD + fib[3][1]*rezm[3][3]%MOD)%MOD << "\n";
    }
    return 0;
}