Cod sursa(job #3122728)

Utilizator NastureNasture Anca Nasture Data 20 aprilie 2023 11:32:30
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
# define MOD 666013
using namespace std;

ifstream cin("iepuri.in");
ofstream cout("iepuri.out");
int copie[4][4],baza[4][4],rez[4][4];
void ridic(int exp, int baza[4][4], int rez[4][4])
{
  int i,j,k;
  for(i=1;i<=3;i++)
    for(j=1;j<=3;j++)
      rez[i][j]=0;
  for(i=1;i<=3;i++)
    rez[i][i]=1;
  while(exp!=0)
  {
    if(exp%2==0)
    {
      exp/=2;
      for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        {
          copie[i][j]=0;
          for(k=1;k<=3;k++)
            copie[i][j]+=(1LL*baza[i][k]*baza[k][j])%MOD;
        }
      for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
          baza[i][j]=copie[i][j];
    }
    else
    {
      exp--;
      for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
        {
          copie[i][j]=0;
          for(k=1;k<=3;k++)
            copie[i][j]+=(1LL*rez[i][k]*baza[k][j])%MOD;
        }
      for(i=1;i<=3;i++)
        for(j=1;j<=3;j++)
          rez[i][j]=copie[i][j];
    }
  }

}
int main()
{
  int t,i,a,b,c,x,y,z,n;
  cin>>t;
  for(i=1;i<=t;i++)
  {
    cin>>x>>y>>z>>a>>b>>c>>n;
    n-=2;
    baza[1][1]=baza[1][3]=baza[2][1]=baza[2][2]=0;
    baza[1][2]=baza[2][3]=1;
    baza[3][1]=c;
    baza[3][2]=b;
    baza[3][3]=a;

    ridic(n,baza,rez);
    cout<<(1LL*rez[3][1]*x+1LL*rez[3][2]*y+1LL*rez[3][3]*z)%MOD<<'\n';
  }
  return 0;
}