Cod sursa(job #2905210)

Utilizator irina_barbu29Irina Barbu irina_barbu29 Data 20 mai 2022 11:10:14
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#define MOD 666013
using namespace std;

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

int t, x, y, z, a, b, c, n;
long long rez[4][4], baza[4][4];

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

void ridicare(long long exp)
{
    while(exp != 0)
    {
        if(exp%2 == 0)
        {
            inmultire(baza, baza);
            exp /= 2;
        }
        else
        {
            inmultire(rez, baza);
            exp--;
        }
    }
}

int main()
{
    cin >> t;
    for(int i = 1; i <= t; i++)
    {
        cin >> x >> y >> z >> a >> b >> c >> n;

        baza[1][2] = baza[2][3] = 1;
        baza[3][1] = c;
        baza[3][2] = b;
        baza[3][3] = a;
        rez[1][1] = rez[2][2] = rez[3][3] = 1;

        ridicare(n-2);
        cout << ( (rez[3][1]*x) + (rez[3][2]*y)+ (rez[3][3]*z) ) % MOD << '\n';

        for(int i = 1; i <= 3; i++)
            for(int j = 1; j <= 3; j++)
                rez[i][j] = baza[i][j] = 0;
    }
    return 0;
}