Cod sursa(job #3157283)

Utilizator Ruxxi7Ruxandra Gheorghe Ruxxi7 Data 15 octombrie 2023 11:03:19
Problema Iepuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;

ifstream in("iepuri.in");
ofstream out("iepuri.out");

int rez[4][4],m[4][4];
void inmultire(int a[4][4],int b[4][4]){
    int c[4][4];
    int i,j,k;
    for(i=1;i<=3;++i)
        for(j=1;j<=3;++j)
            c[i][j]=0;
    for(i=1;i<=3;++i)
        for(j=1;j<=3;++j)
            for(k=1;k<=3;++k)
                c[i][j]=(c[i][j]+(a[i][k]*b[k][j])%MOD)%MOD;
    for(i=1;i<=3;++i)
        for(j=1;j<=3;++j)
            a[i][j]=c[i][j];
}
void rptl(int m[4][4],int exp){
    while(exp!=0)
    {
        if(exp%2==0)
        {
            inmultire(m,m);
            exp/=2;
        }
        else
        {
            inmultire(rez,m);
            exp--;
        }
    }
}
int main()
{
    int t,x,y,z,a,b,c,n,i,j,cnt;
    in>>t;
    for(cnt=1;cnt<=t;++cnt)
    {
        in>>x>>y>>z>>a>>b>>c>>n;
        rez[1][1]=rez[2][2]=rez[3][3]=1;
        m[1][2]=m[2][3]=1;
        m[3][1]=c;
        m[3][2]=b;
        m[3][3]=a;
        rptl(m,n-2);
        out<<((rez[3][1]*x)%MOD+(rez[3][2]*y)%MOD+(rez[3][3]*z)%MOD)%MOD<<'\n';
        for(i=1;i<=3;++i)
            for(j=1;j<=3;++j)
                rez[i][j]=m[i][j]=0;
    }
    return 0;
}