Cod sursa(job #3167185)

Utilizator teodora_lauraTeodora teodora_laura Data 10 noiembrie 2023 11:45:03
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 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(long long q[4][4],long long w[4][4])
{
    long long aux[4][4];
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
        {
            long long s=0;
            for(int k=1;k<=3;k++)
            {
                s=(s+(q[i][k]*w[k][j])%mod)%mod;
                aux[i][j]=s;
            }
        }
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            q[i][j]=aux[i][j];
}
void exp_mat()
{
    while(n)
    {
        if(n%2==1)
            mull(a,b);
        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
    {
        for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            a[i][j]=0;
        a[1][1]=a[2][2]=a[3][3]=1;
        n-=2;
        exp_mat();
        g<<(a[1][1]*z+a[2][1]*y+a[3][1]*x)%mod<<'\n';
    }
}
int main()
{
    long long test;
    f>>test;
    while(test--)
        solve();

    return 0;
}