Cod sursa(job #3265189)

Utilizator robertcosacCosac Robert-Mihai robertcosac Data 27 decembrie 2024 20:42:07
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#define mod 666013
#define int long long
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
int a[4][4], sol[4][4], v[3];
void inmultire (int a[4][4], int b[4][4])
{
    int c[4][4]= {0};
    for (int i=1; i<=3; i++)
    {
        for (int j=1; j<=3; j++)
        {
            int val=0;
            for (int k=1; k<=3; k++)
                val+=a[i][k]*b[k][j];
            c[i][j]=val%mod;
        }
    }
    for (int i=1; i<=3; i++)
        for (int j=1; j<=3; j++)
            a[i][j]=c[i][j];
}
void power (int n)
{
    while (n)
    {
        if (n%2) inmultire (sol, a);
        n/=2;
        inmultire (a, a);
    }
}
signed main ()
{
    int q;
    f >> q;
    while (q--)
    {
        f >> v[0] >> v[1] >> v[2];
        int x, y, z, k;
        f >> x >> y >> z >> k;
        if (k==0)
        {
            g << v[0]<<'\n';
            continue;
        }
        if (k==1)
        {
            g << v[1] <<'\n';
            continue;
        }
        if (k==2)
        {
            g << v[2] <<'\n';
            continue;
        }
        for (int i=1; i<=3; i++)
        {
            for (int j=1; j<=3; j++)
            {
                if (i!=j) sol[i][j]=0;
                else sol[i][j]=1;
            }
        }
        for (int i=1; i<=3; i++)
            for (int j=1; j<=3; j++)
            a[i][j]=0;
        a[2][1]=a[3][2]=1;
        a[1][3]=z, a[2][3]=y, a[3][3]=x;
        power (k-2);
        g << v[0]*sol[1][3]+v[1]*sol[2][3]+v[2]*sol[3][3]<<'\n';
    }
}