Cod sursa(job #2806102)

Utilizator iulianarsenoiuArsenoiu Iulian iulianarsenoiu Data 22 noiembrie 2021 12:42:05
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <bits/stdc++.h>

using namespace std;

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

const int Mod = 666013;

int n,a,b,c,x,y,z;

int p[5][5],d[5][5],aux[5][5],rez[5][5];

void lgput(int e)
{
    p[1][1] = 1, p[1][2] = 0, p[1][3] = 0;
    p[2][1] = 0, p[2][2] = 1, p[2][3] = 0;
    p[3][1] = 0, p[3][2] = 0, p[3][3] = 1;
    while(e)
    {
        if(e%2==0)
        {
            e/=2;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    for(int k=1;k<=3;k++)
                    {
                        aux[i][j] += 1LL * d[i][k] * d[k][j] % Mod;
                        aux[i][j] %= Mod;
                    }
                }
            }
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    d[i][j] = aux[i][j];
                    aux[i][j] = 0;
                }
            }
        }
        else
        {
            --e;
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    for(int k=1;k<=3;k++)
                    {
                        aux[i][j] += 1LL * p[i][k] * d[k][j] % Mod;
                    }
                }
            }
            for(int i=1;i<=3;i++)
            {
                for(int j=1;j<=3;j++)
                {
                    p[i][j] = aux[i][j];
                    aux[i][j] = 0;
                }
            }
        }
    }
}

void solve_test()
{
    f>>x>>y>>z>>a>>b>>c>>n;
    d[1][1] = 0, d[1][2] = 0, d[1][3] = c;
    d[2][1] = 1, d[2][2] = 0, d[2][3] = b;
    d[3][1] = 0, d[3][2] = 1, d[3][3] = a;
    lgput(n-2);
    rez[1][1] = x, rez[1][2] = y, rez[1][3] = z;
    for(int i=1;i<=3;i++)
    {
        for(int k=1;k<=3;k++)
        {
            aux[1][i] += 1LL * rez[1][k] * p[k][i] % Mod;
            aux[1][i] %= Mod;
        }
    }
    for(int i=1;i<=3;i++)
    {
        rez[1][i] = aux[1][i];
        aux[1][i] = 0;
    }
    g<<rez[1][3]<<' ';
}

int main()
{
    int t;
    f>>t;
    for(int test=1;test<=t;test++)
    {
        solve_test();
    }
    return 0;
}