Cod sursa(job #3368718)

Utilizator jarnea_justinjarnea justin ioan jarnea_justin Data 15 octombrie 2026 15:26:03
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
const int mod=666013;
using namespace std;
ifstream f("iepuri.in");
ofstream g("iepuri.out");
void multiply(int a[3][3],int b[3][3],int c[3][3])
{
    int temp[3][3]={0};
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
        for(int k=0;k<3;k++)
        {
            long long prod=(long long)a[i][k]*b[k][j];
            temp[i][j]=(temp[i][j]+prod)%mod;
        }
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
        c[i][j]=temp[i][j];
}
void power(int m[3][3],long long p,int res[3][3])
{
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
        if(i==j) res[i][j]=1;
    else res[i][j]=0;

    int base[3][3];
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            base[i][j]=m[i][j];
    while(p>0)
    {
        if(p%2==1)
            multiply(res,base,res);
        multiply(base,base,base);
        p/=2;
    }
}
int t,x,y,z,a,b,c,n;
long long ans;
int main()
{
    f>>t;
    while(t--)
    {
        f>>x>>y>>z>>a>>b>>c>>n;
        ans=0;
        int m[3][3]={
        {a,b,c},
        {1,0,0},
        {0,1,0}
        };
        int mpow[3][3];
        power(m,n-2,mpow);
        ans=(ans+(long long)mpow[0][0]*(z%mod))%mod;
        ans=(ans+(long long)mpow[0][1]*(y%mod))%mod;
        ans=(ans+(long long)mpow[0][2]*(x%mod))%mod;
        g<<ans<<'\n';
    }
    return 0;
}