Cod sursa(job #3167159)

Utilizator teodora_lauraTeodora teodora_laura Data 10 noiembrie 2023 10:36:10
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#define mod 666013
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
long long a[4][4],b[4][4],c[4][4];
long long n,m,A,B,C,x,y,z;
void mull(int q[4][4],int w[4][4])
{
    int t[4][4], s[4][4];
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            {
                t[i][j]=q[i][j];
                s[i][j]=w[i][j];
                q[i][j]=0;
            }
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            for(int k=1;k<=3;k++)
            {
                q[i][j]+=s[k][j]*t[i][k];
                q[i][j]%=mod;
            }
}
void exp_mat()
{
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            a[i][j]=b[i][j];
    while(n!=1)
    {
        if(n%2==1)
        {
            mull(b,b);
            n/=2;
            mull(b,a);

        }
        else if(n!=0)
        {
            mull(b,b);
            n/=2;
        }
    }

}

void solve()
{
    f>>x>>y>>z>>A>>B>>C>>n;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
        b[i][j]=0;
    b[1][1]=A;
    b[2][1]=B;
    b[3][1]=C;
    b[1][2]=1;
    b[2][3]=1;
    if(n==0)
        g<<x;
    else if(n==1)
        g<<y;
    else if(n==2)
        g<<z;
    else
    {
        n-=2;

        exp_mat();
        g<<b[1][1]*z+b[2][1]*y+b[3][1]*x<<'\n';
    }
}
int main()
{
    long long test;
    f>>test;
    while(test--)
        solve();

    return 0;
}