Cod sursa(job #3166492)

Utilizator MegaCoderMinoiu Teodor Mihai MegaCoder Data 8 noiembrie 2023 20:14:18
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
std::ifstream fin("iepuri.in");
std::ofstream fout("iepuri.out");
#define mod 666013
void multiplyMat(unsigned long long a[3][3], unsigned long long b[3][3])
{
    unsigned long long aux[3][3];
    for(int index=0; index<3; ++index)
        for(int next=0; next<3; ++next)
        {
            unsigned long long s=0;
            for(int k=0; k<3; ++k)
                s=(s+(a[index][k]*b[k][next])%mod)%mod;
            aux[index][next]=s;
        }
    for(int index=0; index<3; ++index)
        for(int next=0; next<3; ++next)
            a[index][next]=aux[index][next];
}
void put(unsigned long long power, unsigned long long prod[3][3], unsigned long long mat[3][3])
{
    while(power)
    {
        if(power%2)
            multiplyMat(prod, mat);
        multiplyMat(mat, mat);
        power/=2;
    }
}
int main()
{
    unsigned long long num;
    fin>>num;
    for(int index=0; index<num; ++index)
    {
        int x, y, z, a, b, c, n;
        fin>>x>>y>>z>>a>>b>>c>>n;
        unsigned long long mat[3][3]={1, 1, 1, 1, 0, 0, 0, 1, 0};
        mat[0][0]=a;
        mat[0][1]=b;
        mat[0][2]=c;
        unsigned long long prod[3][3]={1, 0, 0, 0, 1, 0, 0, 0, 1};
        put(n-2, prod, mat);
        fout<<(prod[0][0]*x+prod[0][1]*y+prod[0][2]*z)%mod<<'\n';
    }
    fin.close();
    fout.close();
    return 0;
}